深入变量

416 阅读2分钟

1.var与不加var的区别

区别一

局部变量和全局变量

var a = 1;
function f (){
    var b = 2;
}

在这段代码中,用var定义了函数内部的变量b,b就是一个局部变量,在函数外使用会报错。 如果换成下面的写法:

var a = 1;
function f (){
    b = 2;
}

这样b没有用var定义,相当于是一个全局变量。在函数f被调用之后,就能使用变量b了。

区别二

可删除和不可删除

不加var的变量,能够被删除掉(delete),加var的变量不能删除。本质上,不加var的变量,是作为window对象的一个属性存在的,所以delete可以删除一个属性。

区别三

加var会提升,不加var不被提升。

2.变量的作用域

全局作用域

    <script>
        var a = 1; //全局变量
        function f () {
            console.log(a);
        }
        f(); //可以使用a
    </script>
    <script>
        function f1 () {
            console.log(a);
        }
        f1();//还可以使用a
    </script>

局部作用域

    <script>
        function f () {
            var a = 1;
            console.log(a);
        }
        f(); 
        console.log(a);// 出错
    </script>

使用变量的就近原则

函数内部var会被"提升"

<script>
    var a=1;
    function f(){
        console.info(a);
        var a=2;
        console.info(a);
    }
    f();
    console.info(a);
</script>

相当于

<script>
    var a=1;// 全局变量a=1
    function f(){
        var a
        console.info(a);
        a=2;// 局部变量a=2
        console.info(a); // 使用局部变量 a=2
    }
    f();
    console.info(a);// 使用全局变量 a=1
</script>

在函数的内部使用变量,如果有一个与全局变量同名的局部变量,以局部变量为准。

如何确定函数内部变量的值:如果当前函数内部没有定义局部变量,就区定义这个函数的那个作用域中去找。

3.推荐变量的使用方式

在思想上,避免使用全局变量。

在行动上,变量的定义要出现在代码段的开头。