Функциональные выражения всегда анонимны, поскольку не имеют имени. Рассмотрим их практическое применение.
Объявление функционального выражения
Нельзя объявить функциональное выражение напрямую. Это приводит к синтаксической ошибке.
// Невозможно использовать функциональное выражение самостоятельно
function (){ // синтаксическая ошибка
}
Результат: SyntaxError: Unexpected token ‘(‘. Это ключевое отличие от обычных функций.
Присваивание функционального выражения переменной
Анонимные функциональные выражения обычно присваиваются переменным с помощью const, поскольку значение переменной не будет переприсваиваться.
const myFunction = function() {
console.log("Hello");
};
myFunction(); // Выведет "Hello" в консоль
console.log(myFunction); // Выведет содержимое переменной myFunction (анонимную функцию)
myFunction содержит функцию. Вызов console.log(myFunction) отобразит саму функцию, а myFunction() — её результат (в этом примере undefined, так как функция ничего не возвращает).
Функциональные выражения как аргументы функций
Наиболее распространенное применение — использование в качестве аргументов других функций, например, коллбэков. Рассмотрим setTimeout, метод глобального объекта window.
setTimeout(function() {
console.log("Delayed message");
}, 1000); // Выведет "Delayed message" через 1 секунду
setTimeout принимает два аргумента: коллбэк-функцию и время задержки в миллисекундах. Здесь используется анонимная функция. Можно использовать именованную функцию, но это менее практично.
function myFunction() {
console.log("Delayed message");
}
setTimeout(myFunction, 3000); // Выведет "Delayed message" через 3 секунды
Использование setInterval
setInterval аналогична setTimeout, но вызывает коллбэк-функцию периодически, с заданным интервалом.
let i = 1;
setInterval(function() {
console.log("Message logged each second: " + i++);
}, 1000); // Выводит сообщение каждую секунду с увеличивающимся счетчиком
Переменная i используется для вывода уникального сообщения каждую секунду.
Функциональные выражения — мощный инструмент в JavaScript, особенно полезный при работе с коллбэками в таких функциях, как setTimeout и setInterval. Их анонимность делает код более компактным и читабельным.