我的同事和我一直在讨论在循环中使用var关键字的好/坏做法。 这是我的方式:
for (var i = 0; i < anArray.length; i++) {
for (var j = 0; j < anotherArray.length; j++) {
var a1 = someValue1;
var a2 = someValue2;
var a3 = someValue3;
var a4 = someValue4;
var a5 = someValue5;
...... //Some other process that involve a1-5
}
}
我在嵌套for循环中使用了var。假设循环i
运行2000次而j
运行3000次。我的同事声称使用像这样的循环导致内存泄漏,这是一种不好的做法。 这是真的吗?
他说&#34; var应该在循环之外声明,以便变量受功能范围限制,并在范围结束时被销毁。&#34; 这是真的吗?
除了上述关于内存泄漏的声明之外,这是一种不好的做法,如果是这样,为什么呢?
我怀疑,因为我知道(或者可能相信)使用var in循环,当这个函数结束时a1-5仍会被破坏。
答案 0 :(得分:2)
变量被提升,这意味着对于JavaScript解释器,您的代码如下所示:
var i, j, a1, a2, a3, a4, a5;
for (i = 0; i < anArray.length; i++) {
for (j = 0; j < anotherArray.length; j++) {
a1 = someValue1;
a2 = someValue2;
a3 = someValue3;
a4 = someValue4;
a5 = someValue5;
...... //Some other process that involve a1-5
}
}
所以你宣称它们没有任何区别 - 无论如何它们都有功能范围。
然而,有一个有点有效的论点(尽管可能有争议),你应该在函数的顶部声明所有变量,这样代码看起来和你对解释器的看法一样,而你不要混淆,认为在块内声明的变量在其他地方无效。我猜这只是个人偏好。
答案 1 :(得分:0)
这纯粹是一个样式问题,应该对性能或内存使用没有影响。 Javascript中的变量具有函数范围,无论它们声明的函数位于何处。编译函数时,所有变量声明都被提升到函数的顶部。