我在一段JavaScript逻辑中使用for循环。 我应该使用var关键字吗?
当我根据W3School的例子运行for-in循环时,没有var,那么作为副作用,它被定义为全局范围(窗口)上的属性:
(function () {
var object = {
a: 1,
b: 2
}
for (varName in object) {
alert(varName + " is" + object[varName])
}
})();
alert(window.varName) //Returns "b" !
//This returns undefined when the for-in is rewritten as for (var varName in object).
编辑:这里是上述代码的小提示,供您欣赏:http://jsfiddle.net/94uEh/
哪种是正确的,首选的形式? - 请注意,我希望支持IE 8(EcmaScript< 5)
答案 0 :(得分:1)
如果您希望值为本地值,则应始终使用var
。
建议不要对变量使用关键字object
,否则可能会在浏览器中遇到未定义的行为。
此外,您通常应避免应用任何假定为全局范围的本地内容。
这很糟糕:
for (varName in object) {
alert(varName + " is" + object[varName])
}
这是正确的:
for (var varName in object) {
alert(varName + " is" + object[varName])
}
如果您需要在全局范围内访问此值,则可能是错误的。在全局范围内使用它也是无用的,因为它只是varName中存在的最后一个值。
答案 1 :(得分:0)
你应该总是使用var
,否则你正在访问一个全局变量(并且存在覆盖某人的其他变量的风险)