javascript预编译

预编译四部曲

1、创建AO对象(执行期上下文)

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

3、将实参与形参相统一

4、在函数体寻找函数声明,AO对应属性值赋予函数体

 

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<script type="text/javascript">
    function fn(a){   
        console.log(a);   
        var a=123;   
        console.log(a);  
        function a(){   }   
        console.log(a);   
        var b=function(){};   
        console.log(b);   
        function d(){   } 
    }  
    fn(1); 
</script>
</body>
</html>

 

函数预编译过程

1、创建AO对象

AO{

}

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

AO{

  a : undefined

  b : undefined

}

3、将实参与形参相统一

AO{

  a : 1

  b : undefined

}

4、在函数体寻找函数声明,AO对应属性值赋予函数体

AO{

  a : function() a{}

  b : undefined

  d : function d(){}

}

 

js是解释性语言,读取一行,解释一行,在执行函数之前,先进行预编译,

此时代码内 a b d 的值为

AO{

  a : function a(){}

  b : undefined

  d : function d(){}

}

接着逐行读取代码,覆盖变量值。在预编译已编译的在执行时不再编译。

执行结果:

全局预编译

1、创建一个GO对象(全局变量对象windoww)

2、寻找变量声明,将变量名作为AO属性名。值为undefined.

3、在函数体寻找函数声明,AO对应属性值赋予函数体

<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
<script type="text/javascript">
	console.log(a)
	var a = 234
	function a(){}
	console.log(a)
</script>
</body>
</html>

预编译过程

1、创建一个GO对象(全局变量对象windoww)

GO {}

2、寻找变量声明,将变量名作为AO属性名。值为undefined.

GO{

  a : undefined

}

3、在函数体寻找函数声明,AO对应属性值赋予函数体

GO{

  a : function a(){}

}

执行结果

 

 

javascript的预编译练习题:https://www.cnblogs.com/2016-zck/p/11018464.html

 

posted @ 2019-06-13 16:39  一笑任逍遥  阅读(209)  评论(2编辑  收藏  举报