JS尾调用
1. 尾调用
尾调用(Tail Call)是函数式编程的一个重要的概念,简单的来说就是:某个函数的最后一步是调用另一个函数。
例如下面的例子就是尾调用:
1 | function f(x) { |
2. 尾调用的特点
那么,我们来总结一下,尾调用的特点:
首先,尾调用必须满足,函数的最后一步是return另一个函数(如上述例子),这里和闭包有点像;
其次,return 后面的表达式必须仅仅是某个函数的调用,除此之外不能包含其它任何别的操作;
看下面的例子,我们来分析:
1 | function f(x) { |
上面这个例子,就不是尾调用,因为return 后的表达式除了函数调用还包含了加法操作,所以这不是尾调用。
再来看一个例子:
1 | function f(x) { |
这仍然不是尾调用,因为上述例子相当于:
1 | function f(x) { |
可以看出,原来的函数并没有return 表达式,相当于返回了undefined,所以此例中的最后一步操作相当于return undefined,所以明显不属于尾调用。
再来看一个例子:
1 | function f(x) { |
此例仍然不属于尾调用,因为最后return 的是函数g(x)的调用返回的结果,所以不是尾调用。
综上所述,判断是不是尾调用,看一看我们总结的那两个条件是否同时满足。
再看一个,你能否判断出下面这个例子是否是尾调用呢?
1 | function f(x) { |
这是否是尾调用呢?写下你的答案吧!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 webRambler-blog!
评论