为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

30秒到达战场 2019-02-06 20:26:30
正在看阮一峰所著的ES6入门,发现有个内容前后矛盾。、书中所说,尾调用优化只在严格模式下开启,但是我使用它尾调用优化后的代码跑,并未开启严格模式也可以正常跑,确实是使用了尾调用优化的。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我自己本地跑了也确实可以很快跑出来,没有卡死,确实是优化了的,但是这里并没有开启严格模式
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

我试了一下,在safari浏览器中,非严格模式下能够正常执行Fibonacci2(10000),但是不能正常执行Fibonacci2(100000)。

你可以将Fibonacci2的参数再增大一点。

我猜不同环境下,JS函数的调用栈大小不同,导致你以为非严格模式下尾递归优化开启了。


查看完整回答
反对 回复 2019-02-06
  • 1 回答
  • 0 关注
  • 474 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信