全局预编译 :

  1. 创建 VO 对象
  2. 找变量名,将变量名设为VO属性,并赋值为undefined
  3. 开始从上到下 执行 语句

函数预编译 :

  1. 创建 AO对象
  2. 找 函数内 变量名 添加到 AO对象 赋值 undefined
  3. 找 形参 添加到 AO对象 赋值 undefined
  4. 实参 替换形参 值
  5. 找函数声明 并且 替换掉 原先的对象
  6. 开始执行代码
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title> VO  AO 对象 建立</title>
	</head>
	<body>
		<script type="text/javascript">
			// 全局预编译 
			console.log(a)
			var a = 0
			function a(){
				console.log('dd')
			}
			a = 0
			console.log(a)
			/* 
			 打印结果 funa 0
			 1.首先 VO预编译 
				a = 0  =>  a = fun
			 2.由上而下 执行代码
				打印 fun  a=0  打印0
			 
			 */
			
			// 函数预编译
			
			
			function cc(a,b){
				console.log(a)
				var a = 0;
				console.log(a)
				var b = function (){
					console.log(1)
				}
				console.log(a)
				console.log(b)
			}
			cc(1)
			
			/* 
			AO (函数)预编译  1.找函数内的 定义的参数  2.找形参 3.实参 赋值给 形参  4. 找函数声明  =》 替换掉 原先的对象  =》 开始执行代码
			 1 0 undi fun
			 
			 1.先进行 预编译 
			 AO{
				 a => undifined,
				 b => undifinde
			 }
			2.由上而下 执行代码
			a => 1
			console.log(1)
			a => 0
			console.log(0)
			b => fun
			...
			 */
			
			// 预编译面试题
			function fun (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)
				
			}
			fun(1,2)
			/* 
			1.预编译
			 VO{
				a undefinde  => 1 => funa
				b undefinde  // 函数 编译的时候  var b = fun 属于变量声明 所以 不影响  =>funb
				d undefinde
				c undefinde  => 2 => func
			 }
			 funa 123 func undefinde  undefinde funb func
			 
			 */
			
		</script>
	</body>
</html>

作者 译文

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注