Комментарии (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.