JavaScript 提升

2020-07-13  本文已影响0人  Hana_r
一、var变量声明提升
        a=2;
        var a;//提升
        console.log(a);//2
        
        console.log(b);//undefined
        var b=2;//只提升了var b;
var b = 2;是被JavaScript看作是两个声明:var b;和 b=2;
二、函数声明提升

函数声明会被提升,函数表达式不会被提升

    foo1();//函数声明被提升,可以正常调用
    function foo1() {
        console.log(a);//undefined
        var a=2;
        console.log('foo1调用成功');
    }
    //每个作用域都有提升操作

    foo2();//TypeError
    bar();//ReferenceError
    var foo2=function bar() {
        console.log('调用成功');
    }
上述的foo2代码块经过提升后,实际上会被理解为以下形式
    var foo2
    foo2();//TypeError
    bar();//ReferenceError
    foo2=function bar() {
        var bar=...
        console.log('调用成功');
    }
三、函数优先

函数声明会首先被提升,然后才是变量声明提升。

    foo();//1
    //函数声明会被提升到普通变量之前
    //所以var foo被当作foo的重复声明忽略掉了
    var foo;
    function foo() {
        console.log(1);
    }
    foo=function () {
        console.log(2);
    }
    //输出的是1,该代码片段被引擎理解如下
    function foo() {
        console.log(1);
    }
    foo();//1
    foo=function () {
        console.log(2);
    }

出现在后面的函数声明可以覆盖前面的

    foo();//3
    var foo;
    function foo() {
        console.log(1);
    }
    foo=function () {
        console.log(2);
    }
    function foo() {
        console.log(3);
    }
四、小结
上一篇下一篇

猜你喜欢

热点阅读