javascript中的预编译



	
		
	
	
		
	

以上代码的输出结果为:ƒ a (){} 

                                   123 

                                   123

                                   ƒ (){}

  这是因为在函数执行前一刻,有个预编译的过程,分为四步:

1、创建AO对象,也就是函数执行上下文

2、找形参和变量声明,将变量和形参名作为AO属性名,值为undefined

3、将实参值和形参统一

4、在函数体里面找函数声明,值赋予函数体

在fn(1)执行前一刻,AO对象的值为{ a:function a(){}    , b:undefined , d:function d(){}},因此在执行第一句输出a的值时为function a(){}

你可能感兴趣的:(javascript)