我应该使用for in in on construct



我在JavaScript逻辑中使用for in for in循环。我是否应该使用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)

如果您希望该值是本地的,则应始终使用var

不建议将关键字object用于变量,您可能会遇到浏览器的未定义行为。

您也通常应该避免应用任何应该在全局范围内本地的东西。

这是不好的:

for (varName in object) {
    alert(varName + " is" + object[varName])
}

这是正确的:

for (var varName in object) {
    alert(varName + " is" + object[varName])
}

如果您需要在全球范围中访问此值,则可能是错误的。同样在全局范围中拥有它是没有用的,因为它仅是最后一个值,它将存在于varname中。

您应该始终使用var,否则您将访问全局变量(并且有风险您正在覆盖某人的变量)

最新更新