2016-03-02 75 views
-4

我有一段非常基本的代碼片段,並試圖對其進行優化。鏈接分配與單一分配

下面是js代碼(未優化):

var new_pod = ""; 
var resume_pod = ""; 
var claim_track_pod = ""; 
var return_track_pod = ""; 

優化的JS代碼:

var new_pod = resume_pod = claim_track_pod = return_track_pod = ""; 

問題1:如何在兩個不同的實現?

問題2:是所有瀏覽器接受的第二種優化方式?

Qeustion 3:是第二個最優化的方式去做正確的方法是什麼?

+0

它只是風格問題。我更喜歡第一個,因爲它更具可讀性並且不易出錯。 – Justinas

+4

第二個聲明一個局部變量和三個全局變量,並且會在「嚴格模式」中拋出一個錯誤。使用第一個。 – nils

+0

您不會通過關注如何初始化一些空變量來優化程序,這是花費時間的完全錯誤的方式 - JS JIT將會優化它。 –

回答

1

問題1:兩種實現方式有何不同?

第二個是醜陋而難以閱讀。首先是你應該這樣做的方式。

問題2:所有瀏覽器都接受第二種優化方式嗎?

第二種方式沒有以任何方式「優化」。

Qeustion 3:第二種優化方式是否是正確的方法?

沒有。見#2。這絕對不是(更)「正確的」

另請參閱關於strict mode的@nils評論。

問題#4你應該問:「我怎樣才能避免這麼多的變量分配?」我們必須看到更多的代碼才能向您展示「更好」的編寫代碼的方式。

1

該聲明不等同。

您應該首先着重編寫一個好的代碼,然後讓JS壓縮器第二次完成代碼壓縮和優化。手工操作幾乎從來都沒有理由。用同樣的方式,你可以叫人用手來展開C中的循環,這很瘋狂。

優化總是依賴於瀏覽器/ JS引擎,因此,如果您按自己的方式進行操作,很難確定性能影響。

1

如果你希望保持它短,它應該是這樣的:

var new_pod, resume_pod, claim_track_pod, return_track_pod; 
new_pod = resume_pod = claim_track_pod = return_track_pod = ""; 

或可替代

var new_pod="", resume_pod="", claim_track_pod="", return_track_pod=""; 
1

第二個聲明瞭一個地方和三個全局變量:

var new_pod = resume_pod = claim_track_pod = return_track_pod = ""; 

new_pod:local

resume_pod:全球

claim_track_pod:全球

return_track_pod:全球

由於return_track_pod被分配到第一,這條語句就會沿行拋出一個錯誤strict mode

ReferenceError: assignment to undeclared variable return_track_pod 

只能使用第一個,因爲第二個可能會帶來意想不到的haviors。