for(var propertyName in object)vs for(propertyName in object)?
问题描述:
这两种迭代对象的属性名称的方法中哪一种更可取?for(var propertyName in object)vs for(propertyName in object)?
for (var propertyName in object) {
}
与
for (propertyName in object) {
}
我知道在第二个例子中,propertyName的成为一个全局变量,这是一件好事,以避免,所以我想第一个会更好,对不对?至于你说
var a = 0; // option 1
b = 0; // option 2
:
答
这个问题可以被简化为
-
var
在选项1限制新变量的范围;它也允许阴影; - 选项2将导致一个新的全局变量,或将值
0
赋值给范围内的任何名为b
的现有变量。
选项1因此确实“更好”。
(然而,值得注意的是,中propertyName
在你的第一个例子中的范围将是封闭功能,循环体或任何封闭条件块的不的。)
答
是。正是你说的原因。如果在其他地方不需要,为什么要将数据从循环中移出?
+0
但JavaScript范围是这样的,变量将在发生该循环的整个函数中可见。在这方面,JavaScript与其他类似C语言显着不同。 – Pointy 2011-12-15 14:43:52
答
第一个。这是
var propertyName;
for (propertyName in object) ...
答
相当于这取决于你的特殊的用法,但我要说的是,你的第一个例子中的99.9%是合适的。将var
关键字排除在外不一定会使propertyName
处于全局状态。它也可以引用父范围中先前定义的变量。
是的,第一个更好,尽管在单独的`var`语句中声明变量也是完全可以的。 – Pointy 2011-12-15 14:41:34