我正在阅读这两个博客:execution context和scope chain由David Shariff发布,深入探讨了javascript的执行环境和范围链概念。
在阅读上述博客后,我不清楚的一件事是javascript如何阻止父函数的执行上下文被垃圾收集?
让我们看一下以下非常简单的代码:
function outer(){
var v1 = 'variable in outer function';
function inner(){
alert(v1);
}
return inner;
}
var innerFunc = outer();
当调用外部函数时,我们得到一个指向内部函数的指针。所以在这个阶段,内部函数被创建/定义,但尚未被调用。
根据博客,只有在调用函数时,才会建立范围链。所以在调用内部函数之前,我认为没有指针引用外部函数的执行上下文。那么js引擎如何防止外部函数的执行上下文被垃圾收集?
答案 0 :(得分:1)
内部函数引用它在 1 中创建的上下文。虽然在调用函数之前范围链不存在,但范围链不是保持外部上下文活动的原因。
1 或严格来说,从内部函数到它使用的所有闭包变量都有一些引用链。它不一定要保持整个上下文的存在。