末尾呼び出し
tail call
関数の末尾呼び出し
関数の最後に呼ばれる関数呼び出しのこと
謎に難しく捉えていたが、文字通りの意味

この関数では、 b
の呼び出しが末尾呼び出し
example.cfunction foo(data) {
a(data);
return b(data);
}
関数の「最後に呼ばれる」というタイミングの話なので、関数の「最後に書かれているかどうか」は関係ない
ex.c// b, cは末尾呼び出し
function bar(data) {
if ( a(data) ) {
return b(data);
}
return c(data);
}
ex.c// aは末尾呼び出し
function foo2(data) {
var ret = a(data);
return ret;
}
逆に最後の行に書かれていたからと言ってそれが末尾呼び出しとは限らない
ex.cfunction foo1(data) {
return a(data) + 1;
}
この場合、 a
の呼び出しは、末尾呼び出しではない
関数ではないが、 +
が末尾呼び出し的なやつになっているので。
関連
末尾呼び出しの特殊パターン
参考
くわしー