Стрелочные функции
В JavaScript функция — такое же значение, как число или строка: её можно положить в переменную и передать дальше. Для коротких функций есть компактная запись через стрелку => — стрелочные функции. В современном коде они встречаются на каждом шагу.
Функция в переменной
Функцию можно создать без имени и сразу сохранить в переменную. Такая запись называется функциональным выражением, а вызывают функцию по имени переменной:
const square = function (n) {
return n * n;
};
console.log(square(5)); // 25Разница с обычным объявлением одна: такую функцию нельзя вызвать раньше строки, где она создана.
Стрелочная запись
Стрелочная функция — сокращённое функциональное выражение. Слово function убирают, а между параметрами и телом ставят стрелку =>:
const square = (n) => {
return n * n;
};
console.log(square(5)); // 25Работает она так же: принимает аргументы и возвращает результат через return.
Короткое тело
Если тело состоит из одного выражения, фигурные скобки и return можно убрать. Результат выражения вернётся автоматически — это называют неявным возвратом:
const square = (n) => n * n;
console.log(square(5)); // 25Одна строка вместо трёх — именно поэтому стрелочные функции так популярны.
Параметры
Без параметров пишут пустые скобки, а несколько параметров перечисляют через запятую. Если параметр ровно один, скобки вокруг него можно опустить, но многие оставляют их для единообразия:
const sayHi = () => 'Привет!';
const add = (a, b) => a + b;
const double = n => n * 2;
console.log(sayHi()); // Привет!
console.log(add(2, 3)); // 5
console.log(double(4)); // 8Длинное тело
Если функции нужно несколько строк, тело берут в фигурные скобки. Тогда return снова пишут явно:
const formatPrice = (amount) => {
const rounded = amount.toFixed(2);
return `${rounded} $`;
};
console.log(formatPrice(9.5)); // 9.50 $Когда что использовать
Обычные объявления function удобны для крупных функций, которые составляют основу программы. Стрелочные функции хороши для коротких действий, особенно когда функцию передают в другую функцию, — об этом в уроке о колбэках. У стрелочных функций есть и особенность с this, её разберём в главе об объектах.
Частая ошибка
Если взять тело в фигурные скобки, неявный возврат перестаёт работать. Функция без return вернёт undefined:
const double = (n) => { n * 2 };
console.log(double(4)); // undefinedЛибо уберите фигурные скобки — (n) => n * 2, — либо добавьте return внутрь.