1.全局预处理与执行

来源:互联网 发布:mac 彻底卸载软件 编辑:程序博客网 时间:2024/06/18 07:49

JavaScript脚本在正式执行前会对全局进行一次预处理,将所有var声明的变量进行一次赋值,赋值为undefined,同时将函数进行声明,写入Lexical Environment(词法环境)而没有用var声明的变量不会在预处理中处理,只有在执行时会定义为全局变量并进行赋值

        console.log(a);//Output undefined        console.log(b);//Output ƒ b(){console.log("bbb");}        console.log(c);//报错!!!  c is not defined        var a=1;        function b(){          console.log("bbb");        }        c=2;

注意函数定义方式:function xx(){} 为正常函数声明,而var xx=function(){}为函数表达式形式 看作先定义一个变量再对其进行赋值,所以在预处理结束后他的值应为undefined。

        console.log(a);//Output ƒ a(){console.log("aaa");}        console.log(b);//Output undefined        function a(){          console.log("aaa");        }        var b=function(){          console.log("bbb");        }

如果出现定义出现重名时,JavaScript的预处理规则:

处理函数声明有冲突,会覆盖

处理变量声明时有冲突,会忽略

        console.log(a);//Output ƒ a(){console.log("a");}        var a=1;        function a(){          console.log("a");        }
        console.log(a);//Output ƒ a(){console.log("a");}        function a(){          console.log("a");        }        var a=1;

总结

        console.log(a);//Output undefined        console.log(b);//报错!!! b is not defined        console.log(f);//Output ƒ f(){console.log("f");}        console.log(g);//Output undefined        var a = 5;        b=6;        console.log(b);//Output 6        function f(){          console.log("f");        }        var g = function(){          console.log("g");        }        console.log(g);//Output ƒ g(){console.log("g");}
原创粉丝点击