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

标签 javascript recursion tail-recursion 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 循环。

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

关于javascript - 为什么没有javascript引擎支持尾调用优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31273281/

相关文章:

recursion - 尾递归与正递归在Erlang中

javascript - 传单中的圆形标记标签

javascript - 在 Ace 编辑器中检索字符串的行号

c - 为什么这个函数不会陷入无限循环?

list - 在自己的行上打印列表的所有项目

c++ - 在递归中使用引用会导致内存泄漏?

ocaml - 在 ocaml 中生成大量字母序列时堆栈溢出

c++ - 这不是尾递归吗? (堆栈溢出错误)

javascript - AngularJS:过滤器更改时的触发功能

javascript - 为什么 OAuth2 规范没有为隐式流定义 JSON 响应模式?