在以下 JavaScript 语句中:
var a = true;
a = a || b;
变量是否会a
对其自身的值进行不必要的重新分配?
在以下 JavaScript 语句中:
var a = true;
a = a || b;
变量是否会a
对其自身的值进行不必要的重新分配?
是的,它将分配给a
. 这种事情甚至可能不会在编译语言中进行优化。
但是,它不会浪费时间进行评估b
,因为它已经知道结果。运行时会发生这样的事情a = a || b
:
if a
a = a
else
a = b
编辑:
为了跟进 icktoofay 所说的“它不会显着影响性能。”,它只是设置一个(布尔)变量,这是可能发生的最简单的操作之一。即使您分配给更重要的东西(例如函数或数组)也不会有什么不同,因为它将分配给项目的引用,而不是再次创建它。
感谢@bfavaretto的设置,这是什么都不做与分配给自己(jsPerf 链接)的性能比较。
a
当a
或b
为真时为真。所以是的,除非您在那些可能影响 值的行之间插入更多代码,否则a
较低的语句将始终设置a
为 true。
是的 - 它不会被优化掉,因为 JavaScript 不会优化。尽管可以想象底层解析器实现可以优化,但我非常怀疑在这种情况下它会优化,而且它会非常特定于平台实现。