Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该在for in构造中使用var吗?_Javascript_Var_For In Loop - Fatal编程技术网

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

Javascript 我应该在for in构造中使用var吗?,javascript,var,for-in-loop,Javascript,Var,For In Loop,我在一段JavaScript逻辑中使用for-in循环。 我是否应该使用var关键字 当我按照W3School的示例运行for in循环时,如果没有var,那么作为副作用,它将被定义为全局范围窗口上的属性: (function () { var object = { a: 1, b: 2 } for (varName in object) { alert(varName + " is" + object[varName]) } })();

我在一段JavaScript逻辑中使用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).
编辑:以下是供您欣赏的上述代码:

哪一种是正确的首选形式请注意,我希望支持IE 8 EcmaScript<5

您应该始终使用var,否则您访问的是全局变量,并且存在覆盖其他人变量的风险

如果您希望该值是局部的,您应该始终使用var

不建议对变量使用关键字对象,否则您可能会在浏览器中遇到未定义的行为

此外,您通常应该避免应用任何假定为全局范围的局部内容

这很糟糕:

这是正确的:


如果需要在全局范围内访问此值,则可能是做错了。此外,在全局范围中使用该值也是无用的,因为它将只是varName中存在的最后一个值。

不要使用W3Schools-大量输入错误和错误信息。这是一个更好的资源:罗布:是的,我完全同意。然而,Mozilla文档包含一个非常类似的示例;对于对象{…}中的变量是的-既没有定义变量也没有定义对象-它是显示语法的伪代码;示例是正确的。我刚刚在IE8浏览器中测试了这一点,我将支持IE8浏览器,并且使用var关键字在IE8中可以正常工作。我把这当作答案。另外,选择name对象完全是为了演示,在我的实际代码中没有实际使用:但我很好奇为什么Mozilla和W3Schools文档都有一些带有糟糕编码准则的示例。它们都省略了var!。啊,是的,你说得对。Mozilla页面提供了正确的示例。但是W3Schools的特点是代码错误。@Joeppie Yes如果有其他来源,应该避免使用W3Schools。他们通常会展示非常糟糕的例子。我通过“报告错误”链接通知W3Schools他们不幸的例子。
for (varName in object) {
    alert(varName + " is" + object[varName])
}
for (var varName in object) {
    alert(varName + " is" + object[varName])
}