我知道返回的内部函数可以保存外部函数的变量,这个特性就是所谓的闭包。
我也知道返回的内部函数的作用域链将保存外部函数的变量对象,因此它可以访问外部函数的变量 - 这也是吃大量内存的基础,甚至导致内存泄漏!
让我感到困惑的是,如果返回的内部函数没有被任何变量引用,就像这样:
function outerFunc() {
var objA = new Object();
objA.propertyA = 'propertyA';
objA.propertyB = 'propertyB';
return function innerFunc() {
return objA.propertyA + ' ' + objB.propertyB;
}
}
outerFunc();
如您所见,我没有将返回的innerFunc分配给任何变量,我想知道是否仍会创建innerFunc的范围链?如果上面的代码仍会导致内存浪费 - 甚至内存泄漏?
我记得函数的作用域(或执行上下文)只有在调用函数时才存在,如果是,那么上面的代码不会导致内存泄漏?我不确定,帮助我摆脱它,帮助!