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

V77*_*777 60 javascript variables

可能重复:
Javascript:使用'var'来声明变量是否可选?

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

例如,而不是

var message = "Hello World!"
Run Code Online (Sandbox Code Playgroud)

我可以用吗

message = "Hello World!"
Run Code Online (Sandbox Code Playgroud)

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

例:

google_ad_width = 160;
google_ad_height = 600;
google_color_border = "000000";
google_color_bg = "ffffff";
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 107

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

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

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


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


Tim*_*own 10

是的,你应该经常使用var.

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

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

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

// 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
Run Code Online (Sandbox Code Playgroud)