是否使用'var'声明变量是可选的?

这个问题在这里已经有了答案:

  • var关键字的用途是什么,什么时候应该使用它(或省略它)? 18个答案

  • 他们的意思不同。 如果使用var则变量在您所在的范围内声明(例如函数)。 如果你没有使用var ,变量会遍历整个范围层,直到它通过给定名称或全局对象(如果你正在浏览器中执行它的话,窗口)遇到一个变量,然后它将附着在变量上。 它与全局变量非常相似。 但是,它仍然可以通过删除来delete (很可能由别人的代码也无法使用var )。 如果在全局范围内使用var ,则该变量是真正的全局变量,不能被删除。

    在我看来,这是javascript最危险的问题之一,应该被弃用,或者至少提出警告警告。 原因是,很容易忘记var并且偶然会将一个公共变量名绑定到全局对象。 这会产生奇怪且难以调试的行为。


    这是Javascript中棘手的部分之一,也是其核心功能之一。 用var声明的变量“开始其生命”就在你声明它的地方。 如果你忽略了这个var ,就好像你正在谈论一个你之前使用过的变量。

    var foo = 'first time use';
    foo = 'second time use';
    

    关于范围,变量自动变为全局是正确的。 相反,Javascript会遍历范围链,看看你之前是否使用过这个变量。 如果它发现一个以前使用过的同名变量的实例,它将使用它以及它声明的任何范围。如果它没有在任何地方遇到该变量,它最终会触发全局对象(在浏览器中的window )并将附加变量给它。

    var foo = "I'm global";
    var bar = "So am I";
    
    function () {
        var foo = "I'm local, the previous 'foo' didn't notice a thing";
        var baz = "I'm local, too";
    
        function () {
            var foo = "I'm even more local, all three 'foos' have different values";
            baz = "I just changed 'baz' one scope higher, but it's still not global";
            bar = "I just changed the global 'bar' variable";
            xyz = "I just created a new global variable";
        }
    }
    

    与嵌套函数和回调一起使用时,这种行为非常强大。 了解什么functions以及范围如何工作是Javascript中最重要的事情。


    不,他们不是等同的。

    myObj = 1; 你正在使用一个全局变量。

    后面的声明为你正在使用的范围创建一个局部变量。

    尝试以下代码以了解差异:

    external = 5;
    function firsttry() {
      var external = 6;
      alert("first Try: " + external);
    }
    
    function secondtry() {
      external = 7;
      alert("second Try: " + external);
    }
    
    alert(external); // Prints 5
    firsttry(); // Prints 6
    alert(external); // Prints 5
    secondtry(); // Prints 7
    alert(external); // Prints 7
    

    第二个函数会改变全局变量“external”的值,但第一个函数不会。

    链接地址: http://www.djcxy.com/p/17343.html

    上一篇: Is using 'var' to declare variables optional?

    下一篇: What is the native keyword in Java for?