JS尾调用

目录

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)
}

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

猜你喜欢

转载自blog.csdn.net/weixin_40920953/article/details/87395051