尾调用优化

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. 在递归调用时,尤其有用。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ES6包含了一个性能领域的特殊要求。这与一个涉及函数调用的特定优化形式相关:即尾调用优化(Tail Call Op...
    Jafeney阅读 877评论 0 0
  • 尾调用 某个函数的最后一步是调用另一个函数。 由于调用后还有操作,即使写在一行内,不属于尾调用。 尾调用由于是函数...
    清水芦苇阅读 1,267评论 0 2
  • 递归函数求解菲波那切数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多...
    _我和你一样阅读 493评论 0 0
  • 最近在研究 JS 调用栈原理时,发现网上用于说明尾调用优化的部分例程不太恰当,缺乏说服力,接下来我会用大量的例子来...
    西山以南阅读 1,135评论 10 4
  • 什么是尾调用? 尾调用(Tail Call)是函数式编程的一个重要概念,本身非常简单,一句话就能说清楚,就是指某个...
    怪瘦Java阅读 185评论 0 0