代码之家  ›  专栏  ›  技术社区  ›  Roy Hinkley

是否需要使用关键字“var”在Javascript中声明变量[重复]

  •  1
  • Roy Hinkley  · 技术社区  · 10 年前

    我发现在Javascript中声明变量时似乎不需要使用关键字“var”。事实上,我没有发现完全省略它会产生不良副作用。

    也许这是一种糟糕的形式,但有人能解释为什么这是必要的吗?

    3 回复  |  直到 10 年前
        1
  •  5
  •   Bic    10 年前

    使用关键字 var 确保变量的作用域正确。如果不使用关键字,则JavaScript将自动将变量创建为全局范围,这可能会在稍后执行页面时导致问题。

    name = 'Bic'; // implicitly global
    
    function myFunc() {
        var name = 'John'; // this variable is scoped here
        console.log(name); // John
        getName(); // Bic
    }
    
    function getName() {
        console.log(name); //Bic
    }
    
    myFunc();
    getName();
    

    在上面的代码中,我声明了一个全局名称和一个作用域名称。注意,在myFunc()完成执行后,全局名称仍然存在。 name 是大多数HTML元素的属性。在这个特别的回答中,我没有 变量 关键字可能会对页面的执行产生不利影响。的值 名称 被抛出范围之外,这可能会影响目标元素等。如果你看看这个 Fiddle ,并在加载后再次单击“运行”,您会注意到它会自动打开一个新选项卡。这是因为name的原始值已被破坏,而页面不知道该在何处真正打开。

    作为一般规则,最好始终使用 变量 关键字,因为这样可以更容易地跟踪该变量的范围,从而避免了它们可能导致的意外问题。

    正如Pointy所指出的,“use strict”pragma(在ECMAScript 5中引入)实际上禁止在没有 变量 关键字。

        2
  •  1
  •   Luis Masuelli    10 年前

    如果你不声明它,也许你正在访问一个全局变量。小心,因为你会得到不想要的副作用。

        3
  •  1
  •   RobG    10 年前

    根据定义,声明变量 要求 这个 变量 关键字。但也有其他方法可以创建变量,例如将它们包含在正式参数列表中:

    function foo(a, b, c) {...}
    

    在这里 , b c 创建时或多或少与声明时一样 变量 .在没有 变量 在其他答案中注明。