您的位置:首页 > Web前端 > JavaScript

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

2017-12-13 17:42 204 查看
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

        }

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



在执行阶段,如果没有用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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: