javascript 如何在返回内部函数时保留外部函数的执行上下文?
How javascript retains the outer function's execution context when an inner function is returned?
我正在阅读这两篇博客:execution context and scope chain 由 David Shariff 发表,深入探讨了 javascript 的执行上下文和作用域链概念。
阅读上述博客后我不清楚的一件事是javascript如何防止父函数的执行上下文被垃圾收集?
让我们看下面非常简单的代码:
function outer(){
var v1 = 'variable in outer function';
function inner(){
alert(v1);
}
return inner;
}
var innerFunc = outer();
当外部函数被调用时,我们得到一个指向内部函数的指针。所以在这个阶段,内部函数是created/defined,但还没有被调用。
根据博客,只有在调用函数时,才会建立作用域链。所以在调用内部函数之前,我认为没有指向外部函数执行上下文的指针。那么js引擎是如何防止外层函数的执行上下文被垃圾回收的呢?
内部函数引用了它在1中创建的上下文。虽然作用域链在函数被调用之前不存在,但作用域链并不是使外部上下文保持活动状态的东西。
1或者严格来说,从内部函数到它使用的所有闭包变量都有一些引用链。它不一定必须使整个上下文保持活动状态。
我正在阅读这两篇博客:execution context and scope chain 由 David Shariff 发表,深入探讨了 javascript 的执行上下文和作用域链概念。
阅读上述博客后我不清楚的一件事是javascript如何防止父函数的执行上下文被垃圾收集?
让我们看下面非常简单的代码:
function outer(){
var v1 = 'variable in outer function';
function inner(){
alert(v1);
}
return inner;
}
var innerFunc = outer();
当外部函数被调用时,我们得到一个指向内部函数的指针。所以在这个阶段,内部函数是created/defined,但还没有被调用。
根据博客,只有在调用函数时,才会建立作用域链。所以在调用内部函数之前,我认为没有指向外部函数执行上下文的指针。那么js引擎是如何防止外层函数的执行上下文被垃圾回收的呢?
内部函数引用了它在1中创建的上下文。虽然作用域链在函数被调用之前不存在,但作用域链并不是使外部上下文保持活动状态的东西。
1或者严格来说,从内部函数到它使用的所有闭包变量都有一些引用链。它不一定必须使整个上下文保持活动状态。