我正在关注有关 javascript 闭包的文章。
在尝试了解执行上下文的细节时,我遇到了一个令我惊讶的结果。
var globalVar = 'g';
var inner;
var outer = function() {
var outerVar = 'o';
inner = function() {
var innerVar = 'i';
console.log(innerVar, outerVar, globalVar);
}
}
outer()
inner() // Q: What does this log out?
这实际上输出i o g
.
我期待看到i undefined g
。
这是我对这个过程的理解。我想了解我的错误:
inner
被声明为全局对象的属性,并且值设置为undefined
outer
被调用。outer
为其作用域链包括outerVar
全局对象创建执行上下文。- 全局对象上的属性值
inner
被分配了对函数定义的引用。 - 完成的执行上下文
outer
。(相关范围被删除?标记为 GC?) inner
被调用。- 创建一个执行上下文,其范围链包括
innerVar
全局对象。 outerVar
在范围内找不到
有人可以解释为什么outerVar
定义吗?