Javascript 我应该在for in构造中使用var吗?
我在一段JavaScript逻辑中使用for-in循环。 我是否应该使用var关键字 当我按照W3School的示例运行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]) } })();
(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])
}