用于迭代对象属性名称的两种方法中哪一种更可取?
for (var propertyName in object) {
}
VS
for (propertyName in object) {
}
我知道在第二个例子中,propertyName变成了一个全局变量,这是要避免的,所以我猜第一个会更好,对吧?
答案 0 :(得分:5)
这个问题可以简化为:
var a = 0; // option 1
b = 0; // option 2
正如你所说:
var
限制了新变量的范围;它还允许遮蔽; 0
分配给范围内名为b
的任何现有变量。因此,选项1确实“更好”。
(但值得注意的是,您的第一个示例中的propertyName
的范围将是循环体或其他任何内容的函数,不的范围包含条件块。)
答案 1 :(得分:1)
是。正是因为你说的原因。如果在其他地方不需要数据,为什么会将数据泄漏出来?
答案 2 :(得分:1)
第一个。它相当于
var propertyName;
for (propertyName in object) ...
答案 3 :(得分:1)
这取决于您的具体用法,但我会说第一个例子的99.9%是合适的。省略var
关键字并不一定会使propertyName
全球化。它还可以引用父范围中先前定义的变量。