ES6中的尾调用优化为什么不在严格模式下也可以使用?

正在看阮一峰所著的ES6入门,发现有个内容前后矛盾。

https://img1.mukewang.com/5c5ad28b0001d1b706480107.jpg书中所说,尾调用优化只在严格模式下开启,但是我使用它尾调用优化后的代码跑,并未开启严格模式也可以正常跑,确实是使用了尾调用优化的。

function Fibonacci2 (n , ac1 = 1 , ac2 = 1) {  if( n <= 1 ) {return ac2};  return Fibonacci2 (n - 1, ac2, ac1 + ac2);
}

Fibonacci2(100) // 573147844013817200000Fibonacci2(1000) // 7.0330367711422765e+208Fibonacci2(10000) // Infinity

我自己本地跑了也确实可以很快跑出来,没有卡死,确实是优化了的,但是这里并没有开启严格模式


30秒到达战场
浏览 477回答 1
1回答

慕的地10843

我试了一下,在safari浏览器中,非严格模式下能够正常执行Fibonacci2(10000),但是不能正常执行Fibonacci2(100000)。你可以将Fibonacci2的参数再增大一点。我猜不同环境下,JS函数的调用栈大小不同,导致你以为非严格模式下尾递归优化开启了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript