预编译

145 阅读1分钟

函数预编译过程

  • 四部曲
  1. 创建一个AO(activation object:执行期上下文)对象;
  2. 找形参和变量声明,将形参和变量声明作为AO对象的属性,值为undefined;
  3. 将实参,形参相统一;
  4. 找函数体内部的函数声明
function fn(a) {
    console.log(a) // f a(){}
    var a = 123
    console.log(a) // 123
    function a(){}
    console.log(a) // 123
    var b = function(){}
    console.log(b)  //f (){}
    function b(){}
 }
    
 fn(1)

全局预编译过程

  • 少掉四部曲中的第三步,AO变成GO
console.log(test) //1
function test(test){
   console.log(test)//2
   var test = 234
   console.log(test) // 3
   function test(){}
 }
 test(1)
 var test = 123
 
// 1.  ƒ test(test){
         //console.log(test)
          //var test = 234
          //console.log(test)
          //function test(){}
       // }
// 2.  ƒ test(){}
// 3.  234