2012-07-16 55 views
-1

哪種風格更適合在Javascript中表現?重新分配變量和重新定義之間的性能差異

STYLE1

var x = '' 
for(var i = 0 ; i < arr.length ; i ++){ 
    x = .... 
    //do something with x 
} 

藍紫魅力

for(var i = 0 ; i < arr.length ; i ++){ 
    var x = .... 
    //do something with x 
} 
+0

我會堅持純粹出於語義原因的第二個例子。也就是說,儘管在當前範圍的頂部定義所有必需的變量(例如函數)更爲常見。 – Marty 2012-07-16 04:13:57

+0

http://jsperf.com/omgggggfdfsdfsdfsdf – rlemon 2012-07-16 04:15:36

回答

5

JavaScript沒有像其他一些語言的塊範圍,只有函數範圍。這意味着,在實踐中的JS引擎解釋你的代碼的第一個版本爲:與

var i, x = '';  
for(i = 0 ; i < arr.length ; i ++){ 
    x = .... 
    //do something with x 
} 

的第二個版本,只是沒有到x分配默認''值完全相同:

var i, x;  
for(i = 0 ; i < arr.length ; i ++){ 
    x = .... 
    //do something with x 
} 

所以在我的意見「風格1」是不好的做法,因爲你分配一個永遠不會使用的值。但我認爲「風格2」更糟,因爲它暗示着不存在的區域範圍。

至於哪個性能更好,沒有經過測試,我期望它們與任何現代JS引擎都差不多。

+0

那麼在for循環中定義變量,而不是在循環之前呢? – JackMahoney 2012-07-16 04:29:02

+1

我在說的是,即使你認爲你在for循環中聲明瞭一個變量,你也不是真的因爲JS沒有塊範圍。 JS引擎使用一種稱爲「提升」的機制,基本上假設你的'var'語句位於包含範圍的頂部,儘管分配未被提升。我的答案中的代碼結構顯示了JS引擎如何處理來自您的問題的代碼。即使你的「樣式2」使它看起來像它們,你的'x'和'i'變量的範圍並不僅限於循環的範圍。 – nnnnnn 2012-07-16 07:28:03