【发布时间】:2015-05-26 06:31:08
【问题描述】:
我正在阅读这两个博客:David Shariff 发表的execution context 和scope 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