概览
-
js 使用堆 + 栈的数据结构管理函数的执行
-
所有的引用数据,都保存到堆内存
-
函数声明时,会做以下事情:
-
创建一个堆内存
-
确定作用域(在哪个执行上下文创建,作用域就是哪个执行上下文)
-
确定 this
-
-
函数执行时,需要:
-
创建一个函数执行上下文,将其压入执行栈
-
确定执行上下文的作用域链(第一个永远是本执行上下文,第二个则是函数声明时的作用域)
-
列出所有变量 value
-
确定 this
-
-
作用域 !== 作用域链
-
js 使用静态作用域,也就是说在函数创建,函数的作用域就已经确定
-
两者保存的都是执行上下文
-
函数 - 作用域
-
执行上下文 - 作用域链
-