Ben*_*Ben 5 javascript tail-recursion google-chrome ecmascript-6
此函数应该是尾调用优化.
据我所知,目前的浏览器(Chrome,甚至在Canary上尝试过)都应该对它进行优化,但是这次运行会出错:
function die(x, s) {
return x === 0 ? s : die(x-1, s+1);
}
die(100000, 0);
Run Code Online (Sandbox Code Playgroud)
错误:
VM369:1 Uncaught RangeError: Maximum call stack size exceeded
或者我弄错了什么?
发布后 5 分钟内解决了这个问题,学习起来可能很有趣,所以我将发布答案:
尾部调用仅在严格模式下进行优化,因此这有效:(如果在 chrome 中运行,请确保在 下启用实验性 Javascript chrome://flags)
(function () {
"use strict";
function die(x, s = 0) {
return x === 0 ? s : die(x -1, s + 1);
}
return die(100000);
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |