js尾调优化

尾调用优化(Tail Call Optimization, TCO)。

简单地说,尾调用就是一个出现在另一个函数“结尾”处的函数调用。这个调用结束后就没有其余事情要做了(除了可能要返回结果值)
调用一个新的函数需要额外的一块预留内存来管理调用栈,称为栈帧。
有一点很重要,需要注意:TCO只用于有实际的尾调用的情况。如果你写了一个没有尾调用的递归函数,那么性能还是会回到普通栈帧分配的情形,引擎对这样的递归调用栈的限制也仍然有效。很多递归函数都可以改写,就像刚刚展示的factorial(..)那样,但是需要认真注意细节。

阶乘函数

fuction factorial(n){
  if(n<2) return 1;
  return n*factorial(n-1)
}

尾调优化后的阶乘函数

function factorial(n){
  function fact(n,res){
    if(n<2) return res;
    return fact(n-1,n*res)
  }
  return fact(n,1)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容