JavaScript运行三部曲:
- 语法分析
- 预编译
- 解释执行
预编译前奏 :
1、imply global(暗示全局变量)
如果任何变量未经声明就赋值使用,此变量就会成为全局对象window所有,并成为window对象的一个属性
2、一切声明的全局变量,都是window的属性
eg、var a = 123 ===> window.a = 123
预编译四部曲
创建AO(Activation Object)对象
找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
将实参和形参相统一
在函数体里面找函数声明,值赋为函数体
例:分析一下代码预编译过程
function fn (a) {
var a = 123;
function a () {}
var b = function () {}
function d () {}
}
fn (1);
1、创建AO对象
AO = {}
2、找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
AO = {
a : undefined,
b : undefined
}
3、将实参和形参相统一
AO = {
a : 1,
b : undefined
}
4、在函数体里面找函数声明,值赋为函数体
AO = {
a : function () {...},
b : undefined,
d : function () {...}
}