前言
大家都知道,JS是一种不需要编译的解释型语言。但其实在浏览器执行JS代码前,也有一个词法分析和预编译过程,为后续代码执行做准备。
一、词法分析
将代码字符串,根据一定的规则,识别出一个个的单词。最终能通过这一过程, 检查出语法错误。
二、预编译
预编译发生在代码执行的前一刻,主要是开辟内存空间,存储变量函数等。
创建全局作用域GO对象
- 寻找声明【变量】作为属性名,值为undefined,
- 寻找声明【函数】作为属性名,值为函数体
创建局部作用域AO对象
- 寻找【函数形参】和声明【变量】作为属性名,值为undefined;
- 将实参和形参相统一,更改形参为具体值;
- 寻找声明【函数】作为属性名,值为函数体
在寻找【变量】和【函数】过程中,会将声明的变量和函数放到最前面,所以就有了“变量提升
”
三、代码执行
执行逻辑代码
总结
了解JS代码预编译过程,有助于解决日常小Bug~~