js执行三部曲:
(1) 语法分析
(2) 预编译
(3) 解释一行执行一行
预编译期间都做了啥事?
预编译发生在函数执行前一刻
预编译四部曲:
(1) 创建执行上下文,即作用域链,this,和函数中的属性
(2) 找形参和变量声明,将变量和形参作为AO(activation object)属性名,值为undefined
(3) 将实参值和形参统一
(4) 在函数体里面找函数声明,值赋予函数体
function fn(a){
var a = 123;
function a() {
}
console.log(a)
var b = function() {
}
console.log(b)
function d(){
}
console.log(d)
}
function test(){
var a = b = 123;
}
test()
window.a ==> undefined
window.b ==> 123