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)就不会对浏览器造成威胁了

 

posted @ 2022-03-05 23:04  踏燕白梅  阅读(63)  评论(0)    收藏  举报