js中的变量作用域

2018-07-09  本文已影响0人  冒险小A
<script>
    var num = 5;
    if (num > 3) {
        var sum=7;
    }
    console.log(sum);
//    此时打印结果会是什么呢?
</script>

这段代码打印结果为7而不是undefined
因为在js中,只有在函数内部声明才会是局部变量,否则是全局变量
此时就算在if里,也是全局变量


练习1:
<script>
    var num = 10;
    fun();
    function fun() {
        console.log(num);
        var num = 20;
    }
</script>

输出结果为:undefined
解析:
此时在函数内,会声明提前,相当于

function fun() {
        var num;
        console.log(num);
        num = 20;
    }

在函数内,优先去找函数内部的声明,所以var num = 10;没有起到作用


练习2:
<script>
    f1();
    console.log(c);
    console.log(b);
    console.log(a);
    function f1() {
        var a=b=c=9;
        console.log(a);
        console.log(b);
        console.log(c);
    }
</script>

输出结果为:9,9,9,9,9,报错
解析:
此时等价于

<script>
    f1();
    console.log(c);
    console.log(b);
    console.log(a);

    function f1() {
        var a = 9;
        b = 9;
        c = 9;
        console.log(a);
        console.log(b);
        console.log(c);
    }
</script>

这里a为局部变量;b,c没有用var声明,为全局变量.

上一篇下一篇

猜你喜欢

热点阅读