您的位置:首页 > 其它

如何理解JaveScript中的函数声明提升

2016-03-17 22:14 274 查看
说起来,JavaScrip中关于“声明提升”的说法,本质上是在编译器在进入可执行代码时会先准备环境

以进入一段function代码为例:

第一步:创建可执行上下文(以下简称为EC),压入当前的EC栈中。EC中包括了以下信息:

词法环境(=环境记录项(保存变量、函数声明和形参)+ 外部词法环境(function的[[scope]]属性,作用域链的本质))
this的指向

变量环境(与环境记录项的值相同。但与环境记录项不同的是,这玩意儿之后不会再发生变动。)
第二步:收集函数声明、变量声明和形参,保存在环境记录项内。这个收集的过程,就是一般所谓的声明提升现象的本质。如果发现了重复的标识符,则优先级为函数声明 、形参 、var声明(优先级低的会被无视)。

第三步:开始执行代码环境记录项内没有的标识符会根据作用域链查找标识符对应的值,环境记录项亦有可能因赋值语句而被修改。

第四步:函数执行完毕,EC栈被弹出、销毁。

作者:郑航

链接:https://www.zhihu.com/question/35363754/answer/62417711

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: