JS的解析与执行——函数预处理与执行

JS中对函数解析与执行也是分为两个阶段,也是分为预处理阶段与执行阶段。函数的预处理阶段,每调用一次,产生一个Lexical Environment。与全局预处理不同的是,在函数中产生中的词法环境对象我们访问不了的。需要注意的一点是,函数的参数,在调用的时候已经加入到全局词法环境(Lexical Environment)对象中。函数预处理的内部声明式函数,内部var声明的变量以及解决冲突的策略与全局预处理相同。

代码如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>函数与处理与执行</title>
</head>
<body>

<script>

function foo(a,b) {

   console.log(a);
   console.log(b);
   
   var b =100;
   
   function a(){
   
     console.log("function.a");
   
   }
   

}


foo(5,6);

</script>

</body>
</html>

预处理阶段

Lexical Environment{

           a:执行函数的引用 //a:5,冲突,被覆盖

           b:6  //var b=100,冲突,被忽略

           arguments:2

        }

在执行阶段会给预处理阶段的成员赋值。


扫描二维码关注公众号,回复: 1053118 查看本文章

在执行阶段,如果没有用var声明的变量,会成为最外部Lexical Environment的成员。

代码如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>函数与处理与执行</title>
</head>
<body>

<script>
function f1(){

    function f2(){
	
	    bb="在执行阶段,如果没有用var声明的变量,会成为最外部Lexical Environment的成员";
	
	};
	
	f2();

}

f1();
console.log(window.bb);

</script>

</body>
</html>




猜你喜欢

转载自blog.csdn.net/mypc2010/article/details/78793873
今日推荐