我一次又一次地使用switch语句。我经常发现自己想在函数中使用return语句。我想知道以这种方式编写的switch语句是否仍然是尾调优化的。
function misc(x) {
switch(true){
case x > 1:
return misc(x-1);
break;
default:
return;
}
}
需要更改哪些内容才能优化case x > 1
尾调用。可以使用switch
语句,还是必须使用if
语句之类的其他内容?
注意:我知道在大多数主流浏览器中,JavaScript都不支持尾调用优化。我大多只是想知道上述代码是否与尾调用优化兼容,无论当前浏览器是否支持它。
答案 0 :(得分:3)
ES6中尾部调用优化的要求仅取决于函数调用处于尾部位置的天气 - 也就是说,函数是返回之前执行的最后一件事。
在你的情况下:
return misc(x-1);
将misc()
置于尾部位置。因此它可以进行尾调用优化。
如果您不这样做,那就不会发生:
return 1 + misc(x-1);
那是因为它等同于:
var tmp = misc(x-1);
tmp = 1 + tmp;
return tmp;
这意味着misc()
不会处于尾部位置。
因此return
位于if
或while
或switch
中无关紧要,只要该函数位于尾部位置即可尾调优化。