预编译

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

你可能感兴趣的:(预编译)