Существует ещё более простой и краткий синтаксис для создания функций, который часто лучше, чем синтаксис Function Expression.
Он называется «функции-стрелки» или «стрелочные функции» (arrow functions), т.к. выглядит следующим образом:
let func = (arg1, arg2, ...argN) => expression
…Такой код создаёт функцию func
с аргументами arg1..argN
и вычисляет expression
с правой стороны с их использованием, возвращая результат.
Другими словами, это более короткий вариант такой записи:
let func = function(arg1, arg2, ...argN) {
return expression;
};
Давайте взглянем на конкретный пример:
let sum = (a, b) => a + b;
/* Более короткая форма для:
let sum = function(a, b) {
return a + b;
};
*/
alert( sum(1, 2) ); // 3
То есть, (a, b) => a + b
задаёт функцию с двумя аргументами a
и b
, которая при запуске вычисляет выражение справа a + b
и возвращает его результат.
- Если у нас только один аргумент, то круглые скобки вокруг параметров можно опустить, сделав запись ещё короче:
// тоже что и // let double = function(n) { return n * 2 } let double = n => n * 2; alert( double(3) ); // 6
- Если нет аргументов, указываются пустые круглые скобки:
let sayHi = () => alert("Hello!"); sayHi();
Функции-стрелки могут быть использованы так же, как и Function Expression.
Например, для динамического создания функции:
let age = prompt("Сколько Вам лет?", 18);
let welcome = (age < 18) ?
() => alert('Привет') :
() => alert("Здравствуйте!");
welcome(); // теперь всё в порядке
Поначалу функции-стрелки могут показаться необычными и трудночитаемыми, но это быстро пройдёт, как только глаза привыкнут к этим конструкциям.
Они очень удобны для простых однострочных действий, когда лень писать много букв.
Многострочные стрелочные функции
В примерах выше аргументы использовались слева от =>
, а справа вычислялось выражение с их значениями.
Порой нам нужно что-то посложнее, например, выполнить несколько инструкций. Это также возможно, нужно лишь заключить инструкции в фигурные скобки. И использовать return
внутри них, как в обычной функции.
Например:
let sum = (a, b) => { // фигурная скобка, открывающая тело многострочной функции
let result = a + b;
return result; // при фигурных скобках для возврата значения нужно явно вызвать return
};
alert( sum(1, 2) ); // 3
Дальше будет ещё информация
Здесь мы рассмотрели функции-стрелки как способ писать меньше букв. Но это далеко не всё!
Стрелочные функции обладают другими интересными особенностями. Их изучение требует знания некоторых других возможностей языка JavaScript, поэтому мы вернёмся к стрелочным функциям позже, в главе Повторяем стрелочные функции.
А пока мы можем использовать их для простых однострочных действий и колбэков.
Итого
Функции-стрелки очень удобны для однострочных действий. Они бывают двух типов:
- Без фигурных скобок:
(...args) => expression
– правая сторона выражение: функция выполняет его и возвращает результат. - С фигурными скобками:
(...args) => { body }
– скобки позволяют нам писать многострочные инструкции внутри функции, но при этом необходимо указывать директивуreturn
, чтобы вернуть какое-либо значение.
Практика
обратиться к codewars.com
Перепишите с использованием функции-стрелки
Замените код Function Expression стрелочной функцией:
function ask(question, yes, no) {
if (confirm(question)) yes()
else no();
}
ask(
"Вы согласны?",
function() { alert("Вы согласились."); },
function() { alert("Вы отменили выполнение."); }
);