2013-03-16 58 views

回答

3

是的,它將分配給a。這種事情可能甚至不會在編譯語言中進行優化。

然而,它不會浪費時間評估b但是因爲它已經知道結果。這樣的事情發生在a = a || b運行:

if a 
    a = a 
else 
    a = b 

編輯:

跟進什麼icktoofay說:「它不會顯著影響性能。」,它只是設置(布爾)變量,是可能發生的最簡單的操作之一。即使分配給像函數或數組這樣更重要的東西,它也沒什麼區別,因爲它將分配給項目的引用,而不是再次創建它。

這是一個無所作爲與自我分配(jsPerf link)的性能比較,感謝@bfavaretto的設置。

+1

這將是'else'而不是'else if'對嗎?如果'a'和'b'爲'false',則會導致a仍然被分配給'b'。 – 2013-03-16 04:00:27

+0

是的,我主要試圖說明,如果a已被評估,它會跳過b。 – 2013-03-16 04:01:40

+0

我明白你的觀點。我會在幾分鐘內接受您的答案,但我很想看到有關此主題的其他信息。 – 2013-03-16 04:03:37

0

a將在ab爲真時爲true。所以是的,除非在可能影響a值的行之間插入更多代碼,否則較低的語句將始終將a設置爲true。

+0

這是不正確的。如果'b'爲'true',但'a'爲例如'10',則'a'將被重新分配給'10',而不是'true'。 – 2014-04-12 11:55:36

0

是的 - 它不會被優化,因爲JavaScript不會優化。雖然底層的解析器實現可以想象得到優化,但我非常懷疑它會在這種情況下,而且它對平臺實現非常具體。