JS的解析与执行——全局预处理命名冲突解决策略与执行

来源:互联网 发布:javascript location 编辑:程序博客网 时间:2024/05/22 08:19

在预处理阶段,如果函数声明有冲突,会覆盖。如果变量声明有冲突,会忽略。例如:

<!doctype html><html><head><meta charset="utf-8"><title>全局预处理命名冲突解决策略与执行</title></head><body><script>foo();console.log(a);function foo(){   console.log("foo1");}function foo(){   console.log("foo2");}var foo = 5566;var a =5;var a =7;console.log(a);</script></body></html>



预处理阶段与执行阶段词法环境对比,代码如下:

<!doctype html><html><head><meta charset="utf-8"><title>全局预处理与执行阶段对比</title></head><body><script>console.log(a);console.log(foo);console.log(g);var a = 5;function foo(){  console.log("foo.log");}var g=function(){  console.log("g.log");}console.log(a);console.log(foo);console.log(g);</script></body></html>


预处理阶段:
Lexical Environment{

    a:undefined

    foo:对函数的一个引用

    g:undefined

}


执行阶段:

Lexical Environment{

    a:5

    foo:对函数的一个引用

    g:对函数的一个引用

}






原创粉丝点击