Javascript switch语句的表达式是一次求值还是针对每种情况求值?
例如,将表达式的值存储在变量中是最佳做法吗Javascript switch语句的表达式是一次求值还是针对每种情况求值?,javascript,Javascript,例如,将表达式的值存储在变量中是最佳做法吗 var category = fetchCategory(); switch(category) { case 'movie': ... break; case 'music': ... break; case 'book': ... break; default: ... } 与: switch(fetchCategory()) { case 'movie': ... break; case 'mus
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: ...
}
有什么显著的性能差异吗?据我所知,它们是一样的 这就是小提琴,正如您所看到的,函数只被调用一次
表达式求值一次:表示它是求值表达式的结果,因此该函数只应调用一次
我更喜欢第二个例子,如果不使用变量,不要将其放在堆栈上。跟踪它更像是一种精神消耗。这要视情况而定,如果存储它没有性能提升,您是否打算只使用一次
category
?在任何现代优化的浏览器中,开关
可能只调用函数一次,而不是每次调用一次。当然,开关表达式只计算一次。这两者在所有实际用途上都是相同的。您可以通过将一个alert()
放入fetchCategory
来轻松测试它。
function test(){ console.log('processing') }
switch(test()){
case 1: console.log(1); break;
case 2: console.log(2); break;
default: console.log('default');
}