如果在外部函数中返回了闭包,并且该闭包引用了在该外部函数中定义的一些变量,那么外部函数是否会在 return 语句之后被回收?
并且由于闭包仍然可以访问变量,系统将这些变量存储在哪里?
谢谢!
如果在外部函数中返回了闭包,并且该闭包引用了在该外部函数中定义的一些变量,那么外部函数是否会在 return 语句之后被回收?
并且由于闭包仍然可以访问变量,系统将这些变量存储在哪里?
谢谢!
每个闭包最终都会创建新的类/函数,并且闭包引用的每个变量都将是其字段/属性之一,因此,不,不会被垃圾收集,当你的闭包的类/函数的实例时,它将被垃圾收集没有参考
我首先不明白你的问题,现在我正在更新我的答案。
说明:- 您可以在函数中嵌套函数。嵌套(内部)函数对其包含(外部)函数是私有的。它也形成了一个闭包。
闭包是一个表达式(通常是一个函数),它可以具有自由变量以及绑定这些变量(“关闭”表达式)的环境。
由于嵌套函数是一个闭包,这意味着嵌套函数可以“继承”其包含函数的参数和变量。换句话说,内部函数包含外部函数的范围。
总结一下:
只能从外部函数中的语句访问内部函数。
内部函数形成一个闭包:内部函数可以使用外部函数的参数和变量,而外部函数不能使用内部函数的参数和变量。
以下示例显示了嵌套函数:
function addSquares(a,b) {
function square(x) {
return x * x;
}
return square(a) + square(b);
}
a = addSquares(2,3); // returns 13
b = addSquares(3,4); // returns 25
c = addSquares(4,5); // returns 41
由于内部函数形成了一个闭包,因此您可以调用外部函数并为外部函数和内部函数指定参数:
function outside(x) {
function inside(y) {
return x + y;
}
return inside;
}
fn_inside = outside(3);
result = fn_inside(5); // returns 8
result1 = outside(3)(5); // returns 8
保留变量
请注意在返回 inside 时如何保留 x。闭包必须在它引用的所有范围内保留参数和变量。由于每次调用都可能提供不同的参数,因此每次调用外部都会创建一个新的闭包。只有当返回的内部不再可访问时,才能释放内存。
这与将引用存储在其他对象中没有什么不同,但通常不太明显,因为不直接设置引用并且无法检查它们。
当一个全局变量被设置时,它被添加到窗口对象中!
var myValue;
function setValue()
{
myValue = "test";
}
function getValue()
{
alert(window.myValue); // yup, it's "test"
}