为什么没有 javascript 个引擎支持尾调用优化?

Why do no javascript engines support tail call optimization?

我最近在 Haskell 中了解了尾调用优化。我从以下帖子中了解到,这不是 javascript 的功能:

javascript 的设计是否有某些固有的东西使得尾调用优化特别困难?为什么这是像 haskell 这样的语言的主要特性,但现在才作为某些 javascript 引擎的特性进行讨论?

JavaScript 支持尾调用优化。目前还没有浏览器实现它,但随着规范 (ES2015) 的最终确定,所有环境 都将 实现它。像 BabelJS 这样将新的 JavaScript 翻译成旧的 JavaScript 的转换器已经支持它,你今天就可以使用它。

Babel 的翻译非常简单:

function tcoMe(x){
    if(x === 0) return x;
    return tcoMe(x-1)
}

转换为:

function tcoMe(_x) {
    var _again = true;

    _function: while (_again) {
        var x = _x;
        _again = false;

        if (x === 0) return x;
        _x = x - 1;
        _again = true;
        continue _function;
    }
}

即 - 到一个 while 循环。

至于为什么它只是 受支持,社区并不需要 尽快这样做,因为它是一个带有循环的命令式语言,因此对于绝大多数情况,您可以自己编写此优化(不像在 ML 中需要这样做,正如 Bergi 指出的那样)。