js预解析以及案例里的坑

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了js预解析以及案例里的坑脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

js预解析

js作为一门解释型脚本语言,特点是边解析边执行。而预解析则是,提前解析的意思,也就是所说的变量提升
console.LOG(a);
VAR a = 10;//undefined

这里的结果是undefined而并不是a is not defined。是因为var a被提升到console.log之前,即

var a;
console.log(a);
var a = 10;//undefined

但是函数提升则不是undefined的结果,而是结果正常

function foo(){
    console.log('aaa');
};
foo();//aaa

VS

foo();//aaa
function foo(){
    console.log('aaa');
};

js预解析以及案例里的坑

案例里的坑

一个闹心的例子

foo();//20
var number =20;
function foo(){
    console.log(number);
}

js预解析以及案例里的坑

函数的例子

foo();//undefined
var number =20;
function foo(){
    console.log(number);
    var number = 10;
}

js预解析以及案例里的坑

函数提升了,函数中的变量number也被提升了,结果就成了undefined

隐藏的隐式全局变量

以下刚开始,我的答案是9 9 9 报错 报错 报错,后来才发现里面有坑。
foo();
console.log(c);//9
console.log(b);//9
console.log(a);//报错 a is not defined
function foo(){
    var a=b=c=9;
    console.log(a);//9
    console.log(b);//9
    console.log(c);//9
}

以上相当于

function foo(){
    var a;
        c = 9;
        b = c;
        a = b;
    console.log(a);//9
    console.log(b);//9
    console.log(c);//9
}
foo();
console.log(c);//9
console.log(b);//9
console.log(a);//报错 a is not defined

因为b跟c都是用隐式全局变量,所以答案是9,而a是用var声明的局部变量,在函数以外访问,会报错。

js预解析以及案例里的坑

脚本宝典总结

以上是脚本宝典为你收集整理的js预解析以及案例里的坑全部内容,希望文章能够帮你解决js预解析以及案例里的坑所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。