你应该在for-in循环中创建一个var吗?

时间:2013-06-29 16:54:50

标签: javascript loops scoping

for(var key in object){
  //process object[key]
}

或只是

for(key in object) {
  //process object[key]
}

有区别吗?

3 个答案:

答案 0 :(得分:5)

是的,有区别。无论你是否使用var key仍然是一个变量,它的'生命'实际上不会在for完成后结束,它的范围将延伸到函数结束。 但是,如果您不使用var - key将是全球性的。

答案 1 :(得分:1)

有区别。如果您尚未声明keyvar key将声明key。如果你有,那就是重新申报,并不是一件好事,但这并不重要。

如果你还没有声明它,那么就像在你的第二个样本中那样声明并使用它是不好的。它将在全球范围内泄漏break in strict mode,并且速度很慢。

答案 2 :(得分:1)

如果您正在寻找建议,请始终选择 var 版本,它既更安全(因为其范围尽可能最小)又更快(因为解释器不必搜索如果变量已存在于整个全局范围内)。加上recommanded by Google