Tail Call Optimization
- 出现在另一个函数“结尾”的函数调用。这个调用结束后就没有其他事情要做。
function foo(x){
return x;
}
function bar(y){
return foo(y + 1) // 是尾调用
}
function baz(){
return 1 + bar(40) // 非尾调用
}
console.log(baz()) //42
- 如果支持 TCO 的引擎能够意识到 foo(y + 1) 的调用位于尾部,意味着bar(...)基本上已经完成了,那么在调用foo(...) 时,他就不需要创建一个新的栈帧,而是可以崇勇以后的栈帧。
- 在递归调用时,尤其有用。