当返回内部函数时,javascript如何保留外部函数的执行上下文?

时间:2015-05-26 06:31:08

标签: javascript scope executioncontext scope-chain

我正在阅读这两个博客:execution contextscope chain由David Shariff发布,深入探讨了javascript的执行环境和范围链概念。

在阅读上述博客后,我不清楚的一件事是javascript如何阻止父函数的执行上下文被垃圾收集?

让我们看一下以下非常简单的代码:

function outer(){
    var v1 = 'variable in outer function';

    function inner(){
        alert(v1);
    }

    return inner;
}

var innerFunc = outer();

当调用外部函数时,我们得到一个指向内部函数的指针。所以在这个阶段,内部函数被创建/定义,但尚未被调用。

根据博客,只有在调用函数时,才会建立范围链。所以在调用内部函数之前,我认为没有指针引用外部函数的执行上下文。那么js引擎如何防止外部函数的执行上下文被垃圾收集?

1 个答案:

答案 0 :(得分:1)

内部函数引用它在 1 中创建的上下文。虽然在调用函数之前范围链不存在,但范围链不是保持外部上下文活动的原因。

1 或严格来说,从内部函数到它使用的所有闭包变量都有一些引用链。它不一定要保持整个上下文的存在。