2015-10-22 28 views
2

的是它存儲在一個變量表達式的值,最好的做法,說switch語句的表達式是一次或每個情況的評估?

var category = fetchCategory(); 
switch(category) { 
    case 'movie': ... break; 
    case 'music': ... break; 
    case 'book': ... break; 
    default: ... 
} 

對戰:

switch(fetchCategory()) { 
    case 'movie': ... break; 
    case 'music': ... break; 
    case 'book': ... break; 
    default: ... 
} 

任何有任何顯著的性能差異?

+0

這取決於,你是否打算只使用'category'一次,如果是這樣,沒有性能增益來存儲它?在任何現代優化的瀏覽器中,'switch'可能只會調用一次函數,而不是每種情況。 – adeneo

+1

當然,切換表達式會被評估一次。兩者對於所有實際目的都是相同的。 –

+2

您可以輕鬆地通過將例如'alert()'到'fetchCategory'中。 – melpomene

回答

0

據我所知,它們是一樣的。

這是小提琴,你可以看到,該函數被調用一次

http://jsfiddle.net/stratboy/q7ac2gqf/1/

function test(){ console.log('processing') } 

switch(test()){ 
    case 1: console.log(1); break; 
    case 2: console.log(2); break; 
    default: console.log('default'); 
} 
1

計算表達式一次:ECMAScript Language Standard說,這是計算表達式的結果,所以該函數只能被調用一次。

我寧願第二個例子,如果一個變量不會被使用不要放在堆棧上。這更多的是追蹤它的精神流失。