Javascript 如果返回的内部函数没有被任何变量引用怎么办。。。?
我知道返回的内部函数可以保存外部函数的变量,这个特性就是所谓的闭包 我还知道返回的内部函数的作用域链将保存外部函数的变量对象,因此它可以访问外部函数的变量——这也是消耗大量内存的基础,甚至导致内存泄漏 让我困惑的是,如果返回的内部函数没有被任何变量引用,就像这样:Javascript 如果返回的内部函数没有被任何变量引用怎么办。。。?,javascript,memory-leaks,scope,closures,Javascript,Memory Leaks,Scope,Closures,我知道返回的内部函数可以保存外部函数的变量,这个特性就是所谓的闭包 我还知道返回的内部函数的作用域链将保存外部函数的变量对象,因此它可以访问外部函数的变量——这也是消耗大量内存的基础,甚至导致内存泄漏 让我困惑的是,如果返回的内部函数没有被任何变量引用,就像这样: function outerFunc() { var objA = new Object(); objA.propertyA = 'propertyA'; objA.propertyB = 'pro
function outerFunc() {
var objA = new Object();
objA.propertyA = 'propertyA';
objA.propertyB = 'propertyB';
return function innerFunc() {
return objA.propertyA + ' ' + objB.propertyB;
}
}
outerFunc();
如您所见,我没有将返回的innerFunc分配给任何变量,我想知道innerFunc的作用域链是否仍将被创建?如果上面的代码仍然会导致内存浪费,甚至内存泄漏
我记得函数的作用域(或执行上下文)只有在调用函数时才存在,如果存在,那么上面的代码不会导致内存泄漏吗?我不确定,帮我摆脱它,救命 无论是否将返回值赋给变量,都不会影响函数在定义过程中发生的情况(
outerFunc
无法知道返回值会发生什么情况)。唯一的区别是该函数可以立即进行垃圾收集。因为它什么都不做,所以应该在执行后立即进行垃圾收集(至少我认为是这样的)@FelixKling,谢谢,但我还是有点困惑。好的,我仍然想知道,如果返回的innerFunc被分配给一个变量,但没有被调用,innerFunc的作用域链是否存在,结果outerFunc的变量是否保留在内存中?函数的内部作用域在函数执行之前不存在。但是,生成的函数对象确实会引用它在其中定义的执行上下文(有关详细信息,请参见),即变量将保留在内存中。但是,如果函数(“闭包”)不使用变量,引擎可能会优化这个过程,并且已经从内存中删除了变量。