预编译
javascript是一个解析型语言。作为解析型语言,它的运行过程主要分为三步:1、语法分析;2、预编译;3、解释执行。
一、语法分析
作用:全局检查是否有语法错误。js会对全部的脚本代码进行解析,通过js引擎检查你的代码是否存在错误,若存在错误就会抛出一个错误;或者语言分析完成。学会这个可以在调试代码的时候,更快地帮助我们找到错误。在浏览器控制台输出红色的错误信息,就是语言分析完成的。
二、预编译
GO对象
1、创建GO对象。
2、全局var 声明的变量提升(只有var声明的变量才会提升;省略var的变量,作用是赋值,没有变量提升)。 赋值:undefined
3、函数声明,并赋值 函数引用。
AO对象
1、创建AO对象。
2、提升形参 赋值:undefined
3、提升方法体中var声明的变量 赋值:undefined
4、形参实参相统一(给形参赋值)。
5、查找方法体中声明的函数。 提升函数并赋值 函数引用
三、解释执行
GO对象
解析执行全局代码。可能会往GO中新增属性,也可能对GO中属性重新赋值。GO中属性
AO对象
函数执行完毕 AO对象销毁(闭包中保留)
注意事项:
1、只有存在作用域时候,才会用预编译;
2、ES5之前&#x