为什么这个尾调用优化函数失败,最大调用堆栈大小超出错误?

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

或者我弄错了什么?

Ben*_*Ben 2

发布后 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)