- Tail call — вызов функции, являющийся последней операцией перед return
- TCO — оптимизация, при которой движок переиспользует текущий stack frame вместо создания нового
- Позволяет бесконечную рекурсию без переполнения стека:
// Не tail call — после рекурсии ещё операция умножения
function factorial(n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
// Tail call — рекурсивный вызов последний
function factorial(n, acc = 1) {
if (n <= 1) return acc;
return factorial(n - 1, n * acc);
}
- В спецификации ES2015, но реализована только в Safari/JavaScriptCore
- V8 (Chrome, Node.js) и SpiderMonkey (Firefox) не реализуют TCO