说起来,JavaScrip中关于“声明提升”的说法,本质上是在编译器在进入可执行代码时会先准备环境。
以进入一段function代码为例:
第一步:创建可执行上下文(以下简称为EC),压入当前的EC栈中。EC中包括了以下信息:
第三步:开始执行代码,环境记录项内没有的标识符会根据作用域链查找标识符对应的值,环境记录项亦有可能因赋值语句而被修改。
第四步:函数执行完毕,EC栈被弹出、销毁。
以进入一段function代码为例:
第一步:创建可执行上下文(以下简称为EC),压入当前的EC栈中。EC中包括了以下信息:
- 词法环境(=环境记录项(保存变量、函数声明和形参)+ 外部词法环境(function的[[scope]]属性,作用域链的本质))
- this的指向
- 变量环境(与环境记录项的值相同。但与环境记录项不同的是,这玩意儿之后不会再发生变动。)
第三步:开始执行代码,环境记录项内没有的标识符会根据作用域链查找标识符对应的值,环境记录项亦有可能因赋值语句而被修改。
第四步:函数执行完毕,EC栈被弹出、销毁。
作者:郑航
链接:https://www.zhihu.com/question/35363754/answer/62417711
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。