for(对象中的var propertyName)vs(对象中的propertyName)?

时间:2011-12-15 14:39:54

标签: javascript

用于迭代对象属性名称的两种方法中哪一种更可取?

for (var propertyName in object) {

}

VS

for (propertyName in object) {

}

我知道在第二个例子中,propertyName变成了一个全局变量,这是要避免的,所以我猜第一个会更好,对吧?

4 个答案:

答案 0 :(得分:5)

这个问题可以简化为:

var a = 0; // option 1
b = 0;     // option 2

正如你所说:

    选项1中的
  • var限制了新变量的范围;它还允许遮蔽;
  • 选项2将生成一个新的全局变量,或者将值0分配给范围内名为b的任何现有变量。

因此,选项1确实“更好”。

(但值得注意的是,您的第一个示例中的propertyName的范围将是循环体或其他任何内容的函数的范围包含条件块。)

答案 1 :(得分:1)

是。正是因为你说的原因。如果在其他地方不需要数据,为什么会将数据泄漏出来?

答案 2 :(得分:1)

第一个。它相当于

var propertyName;
for (propertyName in object) ...

答案 3 :(得分:1)

这取决于您的具体用法,但我会说第一个例子的99.9%是合适的。省略var关键字并不一定会使propertyName全球化。它还可以引用父范围中先前定义的变量。