在以下JavaScript语句中:
var a = true;
a = a || b;
a
变量是否会重新分配到它自己的值?
答案 0 :(得分:3)
是的,它将分配给a
。这种事情甚至可能不会用编译语言进行优化。
然而,它不会浪费时间评估b
,因为它已经知道结果。运行a = a || b
时会发生类似这样的事情:
if a
a = a
else
a = b
修改强>
要跟进icktoofay所说的“它不会对性能产生重大影响。”,它只是设置一个(布尔)变量,这是可能发生的最简单的操作之一。即使你正在分配像函数或数组这样更重要的东西,因为它将分配给项目的引用,而不是再次创建它,它将没什么区别。
通过jsPerf link进行设置,以下是无所事事与分配给自我(@bfavaretto)的效果比较。
答案 1 :(得分:0)
a
或a
为真时, b
将为真。所以是的,除非你在那些可能影响a
的值的行之间插入更多代码,否则较低的语句将始终将a
设置为true。
答案 2 :(得分:0)
是的 - 它不会被优化掉,因为JavaScript没有优化。虽然底层的解析器实现可以想象地进行优化,但我非常怀疑它会在这种情况下,并且它将非常具体到平台实现。