尾调用优化

Tail Call Optimization

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

你可能感兴趣的:(尾调用优化)