js执行上下文栈和作用域链的关系?

作用域链是在函数创建时就确定的,而执行上下文是在函数执行的时候创建压栈的,执行上下文中维护着当前函数的作用域,所以说沿着作用域链查找自由变量的意思是,这个链虽然是已知的(存在函数隐藏属性scope中),但是具体找不找到要指望执行上下文,也就是内存中还有没有留着,这样理解对吗

js执行上下文栈是脚本运行时的概念,也就是说当js脚本执行时,执行环境会自动创建一个上线文栈,用于保存当前执行的环境,运行函数时会建立一个内部对象,称作“运行期上下文”(execution context),一个运行期上下文定义了一个函数运行时的环境。且对于单独的每次运行而言,每个运行期上下文都是独立的,多次调用就会产生多此创建。而当函数执行完毕,运行期上下文被销毁。 一个运行期上下文有自己的作用域链,用于解析标识符。当运行期上下文被创建的时,它的作用域被初始化,连同运行函数的作用域链[[Scope]](也就是你说的存在函数隐藏属性scope中)属性所包含的对象。这些值按照它们出现在函数中的顺序,被复制到运行期上下文的作用域链中。这项工作一旦执行完毕,一个被称作“激活对象”的新对象就创建好了。此激活对象作为函数执行期一个可变对象,包含了访问所有局部变量,命名参数,参数集合和this的接口。然后,此对象被推入到作用域链的最前端。当作用域链被销毁时,激活对象也一同被销毁。当JavaScript代码执行的时候,会进入不同的执行上下文,这些执行上下文就构成了一个执行上下文栈。每个执行上下文都有三个重要的属性,变量对象(Variable object,VO),作用域链(Scope chain)和this,当然还有一些附加的属性。

可以阅读,对你应该有帮助深入理解javascript系列 执行上下文栈,作用域链,变量对象,this,闭包