哪種風格更適合在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
}
哪種風格更適合在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
}
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引擎都差不多。
那麼在for循環中定義變量,而不是在循環之前呢? – JackMahoney 2012-07-16 04:29:02
我在說的是,即使你認爲你在for循環中聲明瞭一個變量,你也不是真的因爲JS沒有塊範圍。 JS引擎使用一種稱爲「提升」的機制,基本上假設你的'var'語句位於包含範圍的頂部,儘管分配未被提升。我的答案中的代碼結構顯示了JS引擎如何處理來自您的問題的代碼。即使你的「樣式2」使它看起來像它們,你的'x'和'i'變量的範圍並不僅限於循環的範圍。 – nnnnnn 2012-07-16 07:28:03
我總是建議使用局部變量儘可能由於在JavaScript中可用的作用域鏈性能優化。 閱讀http://blogs.msdn.com/b/jscript/archive/2007/07/26/scope-chain-of-jscript-functions.aspx瞭解更多信息。
要回答您的特定情況,取決於您的代碼塊希望使用全局分配的變量做什麼。如果它被多次引用,那麼使用第二個更好。 – Keshi 2012-07-16 04:03:06
我會堅持純粹出於語義原因的第二個例子。也就是說,儘管在當前範圍的頂部定義所有必需的變量(例如函數)更爲常見。 – Marty 2012-07-16 04:13:57
http://jsperf.com/omgggggfdfsdfsdfsdf – rlemon 2012-07-16 04:15:36