我最近了解了 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/