Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果返回的内部函数没有被任何变量引用怎么办。。。?_Javascript_Memory Leaks_Scope_Closures - Fatal编程技术网

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的变量是否保留在内存中?函数的内部作用域在函数执行之前不存在。但是,生成的函数对象确实会引用它在其中定义的执行上下文(有关详细信息,请参见),即变量将保留在内存中。但是,如果函数(“闭包”)不使用变量,引擎可能会优化这个过程,并且已经从内存中删除了变量。