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