声明Javascript变量时是否需要var?

时间:2010-10-08 16:56:46

标签: javascript variables

  

可能重复:
  Javascript: is using 'var' to declare variables optional?

在javascript中创建变量时,在变量名称之前添加“var”必须吗?

例如,而不是

var message = "Hello World!"

我可以使用

message = "Hello World!"

我注意到Google Adsense等脚本不使用var

示例:

google_ad_width = 160;
google_ad_height = 600;
google_color_border = "000000";
google_color_bg = "ffffff";

6 个答案:

答案 0 :(得分:104)

如果没有var你创建一个全局变量,并且全局变量是一种很好的方法,可以让不同的函数覆盖其他变量(即它们使代码难以维护)。

使用var,变量的范围仅限于当前函数(及其中的任何内容 - 可以嵌套函数)。

Google Adsense使用全局变量,因为它将脚本分成两个不同的部分(一个本地和一个远程)。更简洁的方法是调用远程脚本中定义的函数,并将参数作为参数传递,而不是让它从全局范围中获取它们。


现代JS应该用strict mode编写,它禁止自动全局变量(更喜欢在顶层显式声明它们,从而防止在变量名称被拼写时意外的全局变量)。

答案 1 :(得分:9)

是的,您应该始终使用var

不使用var有两个主要缺点:

  • 访问未在该函数中定义的函数内的变量将导致解释器查找具有该名称的变量的作用域链,直到找到它或者它到达全局对象(可通过浏览器访问{ {1}})它将创建一个属性。这个全局属性现在随处可用,可能导致混淆和难以发现的错误;
  • 访问未声明的变量将导致ECMAScript 5严格模式出错。

此外,不使用window作为全局变量与使用var不完全相同:使用var时,它在全局对象上创建的属性具有内部{{1 }}}属性,如果没有var,则不是这样:

DontDelete

答案 2 :(得分:4)

来自http://www.updrift.com/article/to-var-or-not-to-var-my-javascript

  1. 对于全局变量,无关紧要,但您可能希望将其用于一致性。
  2. 始终尝试使用'var'在本地函数中声明变量。它确保您使用变量的本地副本,而不是另一个范围内的同名变量。
  3. 例如,这里的两个相似函数具有非常不同的效果:

    var myvar = 0;
    function affectsGlobalVar(i){
       myvar = i;
    }
    function doesNotAffectGlobalVar(i){
       var myvar = i;
    }
    

答案 3 :(得分:3)

没有var,变量被定义为全局。

答案 4 :(得分:1)

将Google AdSense添加到您的网页时,您会链接许多JavaScript文件。变量在那里定义。

http://pagead2.googlesyndication.com/pagead/show_ads.js应该是您网页中的一个脚本引用。

答案 5 :(得分:1)

  

对于像我这样没有开悟的人,   JavaScript基本上有两个范围   变量:全局和本地。   在a之外分配的变量   函数是全局的,变量   在函数内部分配,使用   var关键字是本地的(不是火箭   手术)。但是,如果你离开了   var keyword off,它分配一个全局   变量,无论它在哪里   声明。

来自:http://opensoul.org/2008/9/4/the-importance-of-var-in-javascript