← Назад к вопросам

Что такое анонимная функция?

1.0 Junior🔥 161 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Анонимная функция

Анонимная функция — это функция, которая не имеет имени. Она определяется и часто используется в момент объявления, без необходимости давать ей идентификатор для вызова.

Синтаксис

// Обычная функция с именем
function greet(name) {
  return `Hello, ${name}!`;
}

// Анонимная функция (function expression)
const greet = function(name) {
  return `Hello, ${name}!`;
};

// Анонимная функция (стрелка - современный синтаксис)
const greet = (name) => {
  return `Hello, ${name}!`;
};

Основные характеристики

Функция без имени — вы не можете вызвать её по имени, только через переменную или как callback.

Function Expression — определяется как выражение, а не как statement. Это важно для понимания hoisting.

// Function Declaration (поднимается в начало - hoisting)
foo(); // Работает!
function foo() {
  console.log('Hi');
}

// Function Expression (НЕ поднимается)
bar(); // Ошибка: bar is not a function
const bar = function() {
  console.log('Hi');
};

Практические примеры

1. Как callback

const numbers = [1, 2, 3, 4, 5];

// Анонимная функция в map
const doubled = numbers.map(function(n) {
  return n * 2;
});

// Более современно — стрелочная функция
const doubled = numbers.map((n) => n * 2);

// В event listeners
button.addEventListener('click', function(event) {
  console.log('Button clicked!');
});

// Или со стрелкой
button.addEventListener('click', (event) => {
  console.log('Button clicked!');
});

2. Сразу выполняемые (IIFE - Immediately Invoked Function Expression)

// Классический паттерн для создания скопа
(function() {
  const privateVariable = 'secret';
  console.log(privateVariable);
})(); // Выполняется сразу

// Со стрелкой
(() => {
  const privateVariable = 'secret';
  console.log(privateVariable);
})();

3. Функции высшего порядка (Higher-Order Functions)

// Функция, которая возвращает анонимную функцию
function makeAdder(x) {
  return function(y) { // Анонимная функция
    return x + y;
  };
}

const add5 = makeAdder(5);
console.log(add5(3)); // 8

// Со стрелкой
const makeMultiplier = (x) => (y) => x * y;
const double = makeMultiplier(2);
console.log(double(5)); // 10

4. Асинхронные анонимные функции

const fetchData = async function() {
  const response = await fetch('/api/data');
  return await response.json();
};

// Со стрелкой
const fetchData = async () => {
  const response = await fetch('/api/data');
  return await response.json();
};

Плюсы анонимных функций

  • Локальность — использование только там, где нужна
  • Чистота кода — не засоряешь глобальный namespace
  • Удобство — часто используется в функциональном программировании
  • Замыкания — отличный способ создать private переменные

Минусы

  • Сложнее отлаживать — в stack trace нет имени функции
  • Читаемость — иногда сложнее понять назначение без имени
  • Переиспользование — если функция используется в разных местах, лучше дать ей имя

Когда использовать

  • Callbacks в array methods (map, filter, reduce)
  • Event listeners
  • IIFE для создания скопа
  • Краткие функции как параметры

Когда НЕ использовать

  • Функция используется в нескольких местах — дайте ей имя
  • Сложная логика — выделите в named function для читаемости
  • Требуется рекурсия — нужно имя для вызова самой себя

Современный тренд

В 2025 году стрелочные функции (arrow functions) практически полностью заменили обычный синтаксис function для анонимных функций:

// Старо
const items = data.map(function(x) { return x.name; });

// Современно
const items = data.map((x) => x.name);

Стрелочные функции короче, понятнее и правильно обрабатывают контекст this.