预编译
预编译的四部(在其中执行过的运行时不执行) 创建AO对象 找形参合和变量声明,将变量和形参名作为AO对象,值为undefined 将形参和实参统一 在函数体里面找函数声明,值赋予函数体(将函数名作为AO对象的属性名写进AO对象) function fn ( a ) { console . log ( a ) ; //答案1 var a = 123 ; console . log ( a ) ; //答案2 function a ( ) { } ; //函数声明 console . log ( a ) ; //答案3 var b = function ( ) { } ; //函数表达式 console . log ( b ) ; //答案4 function d ( ) { } //函数声明 } fn ( 1 ) ; 第一步 AO{} 第二部 AO{ a:undefined //变量声明+形参 b:undefined //变量声明 } 第三部 AO{ a:1*//实参传值* b:undefined; } 第四步 AO{ a:function a(){}; b:function b(){}; d:function d(){} } 所以答案: 答案1:function a(){} 答案2:123 答案3:123 答案4:function (){} 例二(有全局变量) function