JS尾调用

6 篇文章 0 订阅

目录

1. 尾调用

2. 尾调用的特点


1. 尾调用

尾调用(Tail Call)是函数式编程的一个重要的概念,简单的来说就是:某个函数的最后一步是调用另一个函数。

例如下面的例子就是尾调用:

function f(x) {
    return g(x)
}

2. 尾调用的特点

那么,我们来总结一下,尾调用的特点:

首先,尾调用必须满足,函数的最后一步是return另一个函数(如上述例子),这里和闭包有点像;

其次,return 后面的表达式必须仅仅是某个函数的调用,除此之外不能包含其它任何别的操作;

看下面的例子,我们来分析:

function f(x) {
    var a = 3
    return a + g(x)
}

上面这个例子,就不是尾调用,因为return 后的表达式除了函数调用还包含了加法操作,所以这不是尾调用。

再来看一个例子:

function f(x) {
    g(x)
}

这仍然不是尾调用,因为上述例子相当于:

function f(x) {
    g(x)
    return undefined
}

可以看出,原来的函数并没有return 表达式,相当于返回了undefined,所以此例中的最后一步操作相当于return undefined,所以明显不属于尾调用。

再来看一个例子:

function f(x) {
    let a = g(x)
    return a
}

此例仍然不属于尾调用,因为最后return 的是函数g(x)的调用返回的结果,所以不是尾调用。

综上所述,判断是不是尾调用,看一看我们总结的那两个条件是否同时满足。

再看一个,你能否判断出下面这个例子是否是尾调用呢?

function f(x) {
    if (x > 0) return g(x)
    return h(x)
}

这是否是尾调用呢?写下你的答案吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值