javascript中的尾部调用优化不起作用
ECMAScript 6引入了尾部调用优化(TCO),我编写了下一段代码javascript中的尾部调用优化不起作用,javascript,node.js,Javascript,Node.js,ECMAScript 6引入了尾部调用优化(TCO),我编写了下一段代码 'use strict'; var isStrict = (function() { return !this; })(); function add5(a,total=0){ if(a==1)return total+a; return add5(a-1,total+a); } add5(100000); 并在chrome(57.0.2987.133(64位))中运行 严格模式似乎已启用,但尾部调用
'use strict';
var isStrict = (function() { return !this; })();
function add5(a,total=0){
if(a==1)return total+a;
return add5(a-1,total+a);
}
add5(100000);
并在chrome(57.0.2987.133(64位))中运行
严格模式似乎已启用,但尾部调用优化不起作用,任何人都可以帮我一个忙并告诉我原因?似乎v8.1.0确实支持TCO
版本为v7.10.x、v7.5.x、v6.11.x的节点可能可以工作,并且它可以在v7.10.0下找到--harmony标志,正如我尝试的那样。看起来v8.1.0确实支持TCO
版本为v7.10.x、v7.5.x、v6.11.x的节点可以工作,并且在v7.10.0下可以找到它,正如我尝试的那样,它可以使用--harmony标志。它只在版本为
--harmony\u tailcalls
的节点中工作,即使在版本为8.1.0
的情况下也是如此
function addFive(a, total){
'use strict';
if(a < 1) return total;
return addFive(a-1, total+a);
}
addFive(100000, 0);
功能添加五(a,总计){
"严格使用",;
如果(a<1)返回总数;
返回addFive(a-1,总计+a);
}
加五(100000,0);
即使在8.1.0
版本上,它也只在带有--harmony\u tailcalls
的节点中工作
function addFive(a, total){
'use strict';
if(a < 1) return total;
return addFive(a-1, total+a);
}
addFive(100000, 0);
功能添加五(a,总计){
"严格使用",;
如果(a<1)返回总数;
返回addFive(a-1,总计+a);
}
加五(100000,0);
@Rajesh:我认为这篇文章与此无关。TCO正常工作时,堆栈不会增长。在没有任何标志的NodeV6.9.0中对我有效,但您可能希望尝试Node--harmony
。节点v8.1.0似乎确实支持@Rajesh的TCO:我认为这篇文章与此无关。TCO正常工作时,堆栈不会增长。在没有任何标志的NodeV6.9.0中对我有效,但您可能希望尝试Node--harmony
。节点v8.1.0似乎确实支持TCO,感谢,节点--v8选项| grep“harmony”,TCO是节点v8.1.0中的“进程中”特性,节点--v8选项| grep“harmony”,TCO是节点v8.1.0中的“进程中”特性
function addFive(a, total){
'use strict';
if(a < 1) return total;
return addFive(a-1, total+a);
}
addFive(100000, 0);