我最近在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;
}
}
那就是-一会儿循环。
至于为什么只有新的支持,社区并没有太大的要求尽快这样做,因为这是一种带有循环的命令式语言,因此在大多数情况下,您可以自己编写此优化程序(不同于需要此功能的MLs) ,如Bergi所指出)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句