在严格的JavaScript循环中使用var会增加与内存相关的开销吗?

时间:2011-05-04 14:08:59

标签: javascript memory-management

例如,是这样的:

while (true) {
    var random = Math.random();
}

...在大多数实现中,效率低于以下几个?

var random;
while (true) {
    random = Math.random();
}

感谢您的意见。

编辑:如果不明显,我最担心的是在这个例子中发生了很多重复(de)分配。

5 个答案:

答案 0 :(得分:8)

JavaScript没有块范围。

在第一个示例中,var text声明中的while声明为hoisted。在这两种情况下,变量只声明一次。在这两种情况下,每次while循环的迭代都会为变量赋值一次。

var

  • function - 作用域
  • 提升到其功能的顶部
  • 同一范围内同名的重新声明是no-ops

答案 1 :(得分:1)

不,变量是在进入范围时启动的,因此在甚至达到var语句之前就存在random

答案 2 :(得分:1)

JavaScript没有块范围,random的声明无论如何都会被提升到其范围的顶部(variable object)。

答案 3 :(得分:0)

这取决于解释器的实现。严格地说,是的,它的开销可能略高;但是根据GC机制,这也应该合理地快速清除。

答案 4 :(得分:0)

Douglas Crockford建议将所有var赋值放在函数的顶部,即任何循环。