我不时使用switch语句。我经常发现自己想在函数内部使用return语句。我想知道以这种方式编写的switch语句是否仍在优化尾部调用。
function misc(x) {
switch(true){
case x > 1:
return misc(x-1);
break;
default:
return;
}
}
需要进行哪些更改才能优化
case x > 1
尾部调用。是否可以使用switch
语句还是我必须使用其他类似if
语句的内容?注意:我知道大多数主流浏览器都不支持JavaScript的尾部调用优化。我只是想知道上面的代码是否与尾调用优化兼容,而不管当前的浏览器是否支持它。
最佳答案
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
中都没有关系,只要函数在尾部位置,就可以对尾部调用进行优化。关于javascript - switch语句是否尾部递归?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40098866/