Q1: 作用域链是什么?
直接解释为,由层级中多个执行上下文的变量对象组成的链表为作用域链。
详情请看是上一篇的作用域以及作用域的介绍。
Q2:执行上下文栈是什么?
直接理解为: 用来管理和存储执行上下文的类数组结构。
详情请看是上一篇的作用域以及作用域的介绍。
Q3: 作用域链和执行上下文栈的关系?
让我们用代码解释一下:
// globalContext = { VO:{},this:window,Scope:go.[[scope]] } // 全局执行上下文
// go.[[scope]] = [ globalContext.Vo ] // 全局作用域
function foo(){
// fooContext = { AO:{},this:{},Scope:foo.[[scope]] } //函数执行上下文栈
// foo.[[scope]] = [fooContext.AO,globalContes.Vo]
function bar(){
// barContext = { AO:{},this:{},Scope:bar.[[scope]] } //函数执行上下文栈
// bar.[[scope]] = [barContext.Ao,fooContext.AO,globalContes.Vo]
}
}
/*
ECstack = [globalContext,fooContext,barContext]
ECStack = [
{
VO:{},
this:windwo,
Scope: [ globalContext.Vo ] 作用域链
},{
Ao:{},
this:{},
Scope:[fooContext.AO,globalContes.Vo] 作用域链
},{
Ao:{},
this:{},
Scope:[barContext.Ao,fooContext.AO,globalContes.Vo] //作用域链
}
]