【问题标题】:How javascript retains the outer function's execution context when an inner function is returned?返回内部函数时,javascript如何保留外部函数的执行上下文?
【发布时间】:2015-05-26 06:31:08
【问题描述】:

我正在阅读这两个博客:David Shariff 发表的execution contextscope chain 深入探讨了 javascript 的执行上下文和作用域链概念。

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

我们来看下面一段非常简单的代码:

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

    function inner(){
        alert(v1);
    }

    return inner;
}

var innerFunc = outer();

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

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

【问题讨论】:

  • 您实际上是在问:“closure 是如何工作的?”

标签: javascript scope executioncontext scope-chain


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多