Scope

作者: 不高兴325 | 来源:发表于2018-04-15 16:47 被阅读0次

    1. 全局作用域

    全局变量拥有全局作用域

    2. 函数作用域

    在函数内声明的变量用于函数作用域。
    在函数体内,局部变量的优先级高于同名的全局变量。

    2.1 声明提前

    函数作用域:在函数内声明的所有变量在函数体内始终是可见的。即JavaScript中所有变量的声明,都被提前至函数体的顶部。

    [JavaScript]
    function test(o) {
        var i = 0;
        if (typeof o == "object") {
            var j = 325;
            for (var k = 0; k < 5; k++) {
                console.log(k);
            }
            console.log("for循环语句外:" + k);  //=> "for循环语句外:5"
        }
        console.log("if条件语句外:" + j);    //=>"if条件语句外:325"
    }
    
    //等价版本(声明提前版本)
    function testV2(o) {
        var i = 0;
        var j;  //声明提前
        var k;  //声明提前
        if (typeof o == "object") {
            j = 325;
            for (k = 0; k < 5; k++) {
                console.log(k);
            }
            console.log("for循环语句外:" + k);
        }
        console.log("if条件语句外:" + j);
    }
    
    var obj = {
        x: 1
    };
    test(obj);
    testV2(obj);
    
    [JavaScript]
    var scope = "global";
    function f() {
        console.log(scope);    //=>"undefined",而不是"global"
        //局部变量在这里声明并初始化,但变量在函数体内任何地方均是有定义的。同名局部变量覆盖了全局变量。
        var scope = "local";    
        console.log(scope);   //=>"local"
    }
    f();
    
    //等价版本(声明提前版本)
    function fV2() {
        var scope;   //声明提前
        console.log(scope);     //=>"undefined"
        scope = "local";
        console.log(scope);     //=>"local"
    }
    fV2();
    

    相关文章

      网友评论

          本文标题:Scope

          本文链接:https://www.haomeiwen.com/subject/sxjdkftx.html