我不时使用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还是whileswitch中都没有关系,只要函数在尾部位置,就可以对尾部调用进行优化。

关于javascript - switch语句是否尾部递归?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40098866/

10-09 18:29