尾调用优化和语义化的取舍?

函数式编程中常常一个方法调用另一个方法,比如:

function test(){
    a();
    b();
}

function a(){
    //...
}

function b(){
    //...
}

尾调用优化建议最后一个函数加 return,消除调用栈,如下

function test(){
    a();
    return b();
}

但是个人看感觉,这样虽然减少内存占用,但是语义上有点不合理,比如这里,我并不需要return个返回值。

那么如何取舍呢?或者有更好的方式? 多谢解惑

阅读 1.4k
2 个回答

按照自己的经历来说 一般的项目中 清晰的代码意图远好于难以被他人理解的奇淫技巧

  1. 尾调只有递归有意义,因为递归需要不停的压栈。
  2. 尾调除了safari没有其他浏览器支持(包括nodejs)尽管他们早就实现了该功能,折只是一个好的想法,仍然有许多问题。
    比如堆栈丢失

    function foo(n) {
      return bar(n*2);
    }
    
    function bar() {
      throw new Error();
    }
    
    foo(1);//尾调优化会用使foo堆栈丢失

浏览器支持
tc39 proposal-ptc-syntax 讨论

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题