6_JS的尾调用优化
1、重用栈帧?
当内部函数的返回值也是外部函数的返回值时,引擎把外部函数的栈帧弹出也无影响
2、尾调用优化
外部函数的返回值是一个内部函数的返回值,满足以下条件即可以:
外部函数的返回值是对尾调用函数的调用 +
尾调用函数返回后不需要执行额外的逻辑+
尾调用函数非闭包
//比如递归使用尾调用优化 // 基础框架 function fib(n) { return fibImpl(0, 1, n); } // 执行递归 function fibImpl(a, b, n) { if (n === 0) { return a; } return fibImpl(b, a + b, n - 1); } 这样重构之后,就可以满足尾调用优化的所有条件,再调用 fib(1000)就不会对浏览器造成威胁了

浙公网安备 33010602011771号