2

在以下 JavaScript 语句中:

var a = true;
a = a || b;

变量是否会a对其自身的值进行不必要的重新分配?

4

3 回答 3

3

是的,它将分配给a. 这种事情甚至可能不会在编译语言中进行优化。

但是,它不会浪费时间进行评估b,因为它已经知道结果。运行时会发生这样的事情a = a || b

if a
    a = a
else
    a = b

编辑:

为了跟进 icktoofay 所说的“它不会显着影响性能。”,它只是设置一个(布尔)变量,这是可能发生的最简单的操作之一。即使您分配给更重要的东西(例如函数或数组)也不会有什么不同,因为它将分配给项目的引用,而不是再次创建它。

感谢@bfavaretto的设置,这是什么都不做与分配给自己(jsPerf 链接)的性能比较。

于 2013-03-16T03:56:15.580 回答
0

aab为真时为真。所以是的,除非您在那些可能影响 值的行之间插入更多代码,否则a较低的语句将始终设置a为 true。

于 2013-03-16T03:56:18.013 回答
0

是的 - 它不会被优化掉,因为 JavaScript 不会优化。尽管可以想象底层解析器实现可以优化,但我非常怀疑在这种情况下它会优化,而且它会非常特定于平台实现。

于 2013-03-16T04:03:18.617 回答