1.js运行三部曲
- 语法分析
- 预编译(发生在函数执行的前一刻)
- 解释执行
预编译前奏
//函数声明整体提升
//变量 声明提升
1.imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有
eg: a = 123;
eg: var a = b = 123;
2.一切声明的全局变量,全是window的属性
eg: var a = 123; ==> window.a = 123;
预编译四部曲:
1.创建AO对象
2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
3.将实参值和形参统一
4.在函数体里面找函数声明,值赋予函数体
function fn(a){
console.log(a);//function a(){}
var a = 123;
console.log(a);//123
function a(){}
console.log(a);//123
var b = function(){}
console.log(b);//function(){}
function d(){}
}
fn(1);
1.创建AO Activation Object(执行期上下文)
AO{
a:123,
b:function(){},
d:function d(){}
}
全局生成了一个GO对象Global Object
var a = 123;
function a(){}
console.log(a);//123
GO ===window{
a:123
}