JavaScript——预编译

108 阅读1分钟

预编译

预编译阶段:作用域的创建阶段

function fn(a,c){
	console.log(a);
	var a = 123; 
	console.log(a);
	console.log(c); 
	function a(){};
	if(false){
		var d = 678;
	}
	console.log(d); 
	console.log(b);
	var b = function(){};
	console.log(b);
	function c(){};
	console.log(c);
}
fn(1,2);

预编译阶段所经历的过程:

  1. 创建AO对象;(AO对象:供JS引擎访问)
  2. 找形参和变量的声明(作为AO对象的属性名,值是undefined);
  3. 实参和形参相统一;
  4. 找函数声明(会覆盖变量的声明)。
AO对象状态:
变量名步骤2步骤3步骤4
aundefined1function a(){}
cundefiend2function c(){}
bundefined
dundefined

运行结果:

function a(){} 123 function c(){} undefined undefined function (){} function c(){}