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

Is var necessary when declaring Javascript variables?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Javascript: is using 'var' to declare variables optional?

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

例如,而不是

1
var message ="Hello World!"

我可以用吗

1
message ="Hello World!"

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

例:

1
2
3
4
google_ad_width = 160;
google_ad_height = 600;
google_color_border ="000000";
google_color_bg ="ffffff";


如果未使用varletconst声明变量(在当前作用域中显式创建),则(在非严格模式下)创建隐式全局变量。

Globals是一种很好的方法,可以让不同的函数覆盖彼此的变量(即它们使代码难以维护)。

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

(constlet范围常量和变量到当前块而不是函数,这通常使变量比var更容易管理。)

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

现代JS应该以严格模式编写,它禁止隐式全局变量(更喜欢在顶级显式声明它们,从而防止在变量名称被拼写时意外的全局变量)。


是的,你应该总是使用var

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

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

此外,不使用var表示全局变量与使用var不完全相同:使用var时,它在全局对象上创建的属性具有内部DontDelete属性,如果没有< X0>:

1
2
3
4
5
6
7
8
9
10
11
// Next line works in any ECMAScript environment. In browsers, you can
// just use the window object.
var globalObj = (function() { return this; })();

var x = 1;
delete globalObj.x;
alert(x); // Alerts 1, x could not be deleted

y = 2;
delete globalObj.y;
alert(y); // Error, y is undefined


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

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

    1
    2
    3
    4
    5
    6
    7
    var myvar = 0;
    function affectsGlobalVar(i){
       myvar = i;
    }
    function doesNotAffectGlobalVar(i){
       var myvar = i;
    }

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


    For the unenlightened like myself,
    JavaScript basically has two scopes
    for variables: global and local.
    Variables assigned outside of a
    function are global, and variables
    assigned inside of a function, using
    the var keyword, are local (not rocket
    surgery). However, if you leave the
    var keyword off, it assigns a global
    variable, regardless of where it’s
    declared.

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


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

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