例如,是这样的:
while (true) {
var random = Math.random();
}
...在大多数实现中,效率低于以下几个?
var random;
while (true) {
random = Math.random();
}
感谢您的意见。
编辑:如果不明显,我最担心的是在这个例子中发生了很多重复(de)分配。
答案 0 :(得分:8)
JavaScript没有块范围。
在第一个示例中,var text
声明中的while
声明为hoisted。在这两种情况下,变量只声明一次。在这两种情况下,每次while
循环的迭代都会为变量赋值一次。
var
function
- 作用域答案 1 :(得分:1)
不,变量是在进入范围时启动的,因此在甚至达到var语句之前就存在random
。
答案 2 :(得分:1)
JavaScript没有块范围,random
的声明无论如何都会被提升到其范围的顶部(variable object)。
答案 3 :(得分:0)
这取决于解释器的实现。严格地说,是的,它的开销可能略高;但是根据GC机制,这也应该合理地快速清除。
答案 4 :(得分:0)
Douglas Crockford建议将所有var赋值放在函数的顶部,即任何循环。