老样子,先看下面的函数
function fn(a){
console.log(a)
var a = 123
console.log(a)
function a(){
}
console.log(a)
var b = function(){
}
console.log(b)
function d(){
}
}
fn(1)
打印结果 function(){} 123 123 function(){}
=====华丽的分隔符-----------------------------------------
js 特点: 单线程 解释性语言
js 执行 第一步
预编译:预编译发生再函数执行的前一刻
预编译四部曲:{
1.创建ao对象
2.找形参和变量申明,将形参和变量的名作为ao的属性名,初始值为undefined
3。 将实参和形参统一 1 =》a f(1)
4. 在函数体{}中找函数声明,值赋予函数体
}
1.创建AO对象(Activation Object)(执行期上下文)
先定义后执行 fn 声明 优先于 变量申明
下面是AO 对象的变化过程
AO{
a:undefined;
b:undefined,
d: function d(){}
}
AO{
a:1;
b:function(){},
}
AO{
a:function(){};
b:function(){},
d: function d(){}
}
AO{
a:3;
b:function(){},
d: function d(){}
}