1.尾调用优化的条件
- 代码在严格模式下执行。
- 外部函数的返回值是对尾调用函数的调用。
- 尾调用函数返回后不需要执行额外的逻辑。
- 尾调用函数不是引用外部函数作用域中自由变量的闭包。
下面是无尾调用优化的例子:
"user strict"
//无优化:尾调用没有返回
function outerFunction(){
innerFunction();
}
//无优化:尾调用没有直接返回
function outerFunction(){
let innerResult = innerFunction();
return innterResult;
}
//无优化:尾调用是一个闭包
function outerFunction(){
let foo = 'bar';
function innerFunction(){return foo;}
return innerFunction();
}
下面是有尾调用优化的例子:
"user strict"
//有优化:栈帧销毁前执行参数计算
function outerFunction(a,b){
return innerFunction(a+b);
}
//有优化:初始返回值不涉及栈帧
function outerFunction(a,b){
if(a<b){
return a;
}
return innerFunction(a+b)
}
//有优化:两个内部函数都在尾部
function outerFunction(condition){
return condition?innerFunctionA():innerFunctionB();
}