1.全局预处理与执行

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");}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值