switch语句的表达式是一次评估还是针对每种情况评估?

时间:2015-10-22 06:49:07

标签: javascript

将表达式的值存储在变量中是最佳做法,比如

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: ...
}

是否有任何显着的性能差异?

2 个答案:

答案 0 :(得分:1)

表达式被评估一次:ECMAScript Language Standard表示它是评估表达式的结果,因此该函数只应被调用一次。

我更喜欢第二个例子,如果不打算使用变量,请不要将它放在堆栈上。这更像是精神上的消耗,追踪它。

答案 1 :(得分: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');
}