JS的预编译与传统的预编译是不一样的
JS是解释型语言(编译一行,执行一行)
传统的编译会经历很多步骤,比如分词、解析、代码生成
一、JS运行三部曲
语法分析(先扫描一遍,看是否有语法错误)
预编译(执行前一刻)(变量声明提升,函数声明整体提升)
解释执行(解释一行,执行一行)
1、函数编译四部曲(函数预编译发生在函数执行前一刻)
(1)创建AO对象
(2)找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
(3)将形参与实参的值统一
(4)在函数体里找函数声明,并赋值函数体
2、全局预编译三部曲
(1)创建GO对象
(2)找变量声明,将变量声明作为GO对象的属性名,值赋予undifined
(3)找出全局变量中的函数声明,并赋值函数体