Перейти к основному содержимому
Об авторе
Проекты
Знания
Знания/JavaScript/tco

Что такое оптимизация хвостовых вызовов (Tail Call Optimization)?

УглублённыйФункцииДвижок и оптимизация
  • 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
  • Главная
  • Об авторе
  • Проекты
  • Знания
Логотип nKolmykov