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

来源:互联网 发布:不支持后端数据库设计 编辑:程序博客网 时间:2024/06/03 13:30

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>




原创粉丝点击