3.JS( 九 )

解释执行代码(直到执行调用函数foo(20)语句) 
GO/window = {         a: 10,         c: function (){             console.log("I at C function");         }         test: function(a) {             console.log(a);             var a = 123;             console.log(a);             function a() {}             console.log(a);             var b = function() {}             console.log(b);             function d() {}         }     }调用函数foo(20)前发生布局预编译 // 局部预编译前两步: AO = {         a:undefined,         b:undefined,     }  // 局部预编译第三步: AO = {             a:20,             b:undefined,         } // 局部预编译第四步: AO = {         a:function a() {},         b:undefined         d:function d() {}     }预编译总结:

  1. 函数声明整体提升-(具体点说,无论函数调用和声明的位置是前是后,系统总会把函数声明移到调用前面)
  2. 变量 声明提升-(具体点说,无论变量调用和声明的位置是前是后,系统总会把声明移到调用前,注意仅仅只是声明,所以值是undefined)
面试题:
 var num3 = 10; function func3(){     console.log(num3);     var num3 = 20; } func3(); console.log(num3);    /*          // 全局编译          GO{            num3:undefined,            func3: function (){             console.log(num3);             var num3 = 20;         }          // 全局执行         var num3 = 10;         GO{            num3:10,            func3: function (){             console.log(num3);             var num3 = 20;         }           // 局部编译         func3.AO{            num3:undefined,         }           // 局部执行          func3.AO{            num3:20,         }          // 全局执行          GO.num3 = 10         }  */

经验总结扩展阅读