Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript switch语句的表达式是一次求值还是针对每种情况求值?_Javascript - Fatal编程技术网

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');
}