js中注册标识符流程

注册分为三个阶段:分别是注册阶段,函数处理阶段,变量处理阶段这三个阶段有先后顺序的。(注:这三个阶段的名字没有权威性,是作者为了方便记忆自己起的名字)

注册阶段的特征

1.此时不会运行代码

2.检查低级的语法错误

3.注册在当前词法环境中所声明的变量和函数

4.一旦创建了新的词法环境,就会执行这一阶段

函数处理阶段

如果是函数环境(也就是说局部环境):创建形参及函数参数的默认值;然后实参形参相统一。 如果全局环境,就跳过这这一步

接下来是全局环境和函数环境都经历的:将函数声明进行扫描并绑定到当前环境与函数名相同的标识符上。若该标识符已经存在,那么该标识符的值将被重写。(注意此时不会理会函数表达式和箭头函数)

对变量进行处理

若在全局作用域中或者函数作用域中。扫描三种变量 var 、let、const定义的变量。

若是块级作用域:扫描两种变量 let、const定义的变量。对于所查找到的变量,若该标识符不存在,进行注册并将其初始化为undefined。若该标识符已经存在,将保留其值。

一生的日子很长,一定要注意调节,要劳逸结合
原文地址:https://www.cnblogs.com/weikemudan/p/11152041.html