1.js运行三部曲
语法分析、预编译、解释执行
2.预编译(函数声明整体提升,变量声明提升)
test(); // 123
function test() { console.log(123)}
-------------------------------------------
function test() { console.log(123)}
test(); // 123
-------------------------------------------
var a = 123;
console.log(a); // 123
--------------------------------------------
console.log(a); // undefined
var a = 123;
---------------------------------------------
console.log(a); // 报错
---------------------------------------------
3. 预编译前奏
- imply global暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有。
- 一切声明的全局变量,全是window的属性
4.预编译四部曲
- 创建AO对象, 全局GO
- 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
- 将实参和形参统一
- 在函数体内找函数声明,值赋予函数体