我应该在for in构造中使用var吗?

时间:2014-01-27 09:52:50

标签: javascript var for-in-loop

我在一段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)

2 个答案:

答案 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,否则你正在访问一个全局变量(并且存在覆盖某人的其他变量的风险)