声明JavaScriptvariables时var是否必要?
可能重复:
Javascript:是使用'var'来声明variables是否可选?
当在javascript中创buildvariables时,在variables名之前添加“var”是必须的吗?
例如,而不是
var message = "Hello World!"
我可以用吗
message = "Hello World!"
?
我注意到像谷歌Adsense脚本不使用变种
例:
google_ad_width = 160; google_ad_height = 600; google_color_border = "000000"; google_color_bg = "ffffff";
如果没有var
你创build一个全局variables,而全局variables是一个奇妙的方式来让不同的函数覆盖其他variables(也就是说它们让代码变得很难维护)。
使用var
,variables的作用域被限制在当前函数中(以及其中的任何内容 – 可以嵌套函数)。
谷歌的Adsense使用全局,因为它将脚本分成两个不同的部分(一个本地和一个远程)。 更简洁的方法是调用远程脚本中定义的函数,并将参数作为parameter passing,而不是从全局范围中select它们。
是的,你应该总是使用var
。
不使用var
有两个主要缺点:
- 在函数中访问一个没有在函数中定义的variables将导致解释器为这个名称的variables查找作用域链,直到它find一个variables或者它到达全局对象(通过
window
在浏览器中访问)将创build一个属性。 这个全球性的资产现在遍布全球,可能造成混乱和难以察觉的错误; - 访问未声明的variables将在ECMAScript 5严格模式下导致错误。
此外,不使用var
作为全局variables与使用var
不完全相同:使用var
,它在全局对象上创build的属性具有内部的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
从http://www.updrift.com/article/to-var-or-not-to-var-my-javascript
- 对于全局variables,这并不重要,但是您可能想要使用它来保持一致性。
- 总是尝试使用“var”声明本地函数中的variables。 它确保您使用的是variables的本地副本,而不是另一个范围中的同名variables。
例如,这里的两个类似的函数有着非常不同的效果:
var myvar = 0; function affectsGlobalVar(i){ myvar = i; } function doesNotAffectGlobalVar(i){ var myvar = i; }
没有variables被定义为全局variables。
将Google AdSense添加到您的网页时,您会链接多个JavaScript文件。 variables在那里定义。
http://pagead2.googlesyndication.com/pagead/show_ads.js应该是你的页面中的脚本引用之一。;
对于像我这样的无知者,JavaScript基本上有两个variables的范围:全局和局部。 在函数之外分配的variables是全局variables,而在函数内部使用var关键字分配的variables是本地的(不是火箭手术)。 但是,如果closuresvar关键字,则会分配一个全局variables,而不pipe它是在哪里声明的。
来自: http : //opensoul.org/2008/9/4/the-importance-of-var-in-javascript