js运行三部曲
- 语法分析
- 预编译
- 解释执行
预编译前奏
- imply global 暗示全局变量, 即任何变量, 如果为经声明就赋值, 此变量就为全局对象所有.
- 一切声明的全局变量, 全是window的属性.
例: var a = 123; --> window.a = 123;
预编译
四部曲:
创建AO对象
找形参和变量声明, 将变量和形参名作为AO属性名, 值为undefined
将实参值和形参统一
-
在函数体里面找函数声明, 值赋予函数体.
例:
以当前函数为例子
创建AO对象为{
a: undefined
b: undefined
}
第三部将实参值和形参相统一
AO = {
a : 1,
b : undefined
}
第四部, 在函数体里找函数声明, 值赋予函数体
Ao = {
a: function a( ){ },
b: undefined,
d: function d( ) { }
}
因此该例子打印出来的结果应该为
总结
变量声明提升,
函数声明整体提升
相信你已经掌握了方法, 因此我们再来一个例子来试试
function d ( ){ }创建AO对象, function d ( ){ }形参变量声明
AO = {
a : undefined,
b : undefined,
c : undefined
}
第三部实参与形参相统一
AO = {
a : 1,
b : undefined,
c : undefined
}
第四部,在函数体里找函数声明, 值赋予函数体
AO = {
a : 1,
b : function b ( ){ },
c : undefined,
d ; function d ( ){ }
}
最后开始执行, 先打印a为1, 借下来将c = 0, a = 3, b = 2, 打印b为2, 再打印b为2.
再来看一个例子
注意: 这里的a也是全局的