Есть еще один очень простой и лаконичный синтаксис для создания функций, который зачастую лучше, чем функциональные выражения.
Это называется «стрелочными функциями», потому что выглядит вот так:
let func = (arg1, arg2, ..., argN) => выражение;
При этом создается функция func , которая принимает аргументы arg1..argN , затем оценивает expression в правой части с их использованием и возвращает результат.
Другими словами, это более короткая версия:
let func = function(arg1, arg2, ..., argN) {
возвратное выражение;
};Давайте посмотрим конкретный пример:
пусть sum = (a, b) => a + b;
/* Эта стрелочная функция представляет собой более короткую форму:
пусть сумма = функция (а, б) {
вернуть а + б;
};
*/
Предупреждение(сумма(1, 2)); // 3 Как видите, (a, b) => a + b означает функцию, которая принимает два аргумента с именами a и b . При выполнении он оценивает выражение a + b и возвращает результат.
Если у нас только один аргумент, то круглые скобки вокруг параметров можно опустить, что сделает его еще короче.
Например:
пусть double = n => n * 2;
// примерно то же самое, что: let double = function(n) { return n * 2 }
предупреждение(двойной(3)); // 6Если аргументов нет, скобки пусты, но они должны присутствовать:
letsayHi = () => alert("Привет!");
сказатьПривет();Стрелочные функции можно использовать так же, как и функциональные выражения.
Например, чтобы динамически создать функцию:
let age = Prompt("Сколько вам лет?", 18);
пусть добро пожаловать = (возраст <18 лет) ?
() => alert('Привет!'):
() => alert("Привет!");
добро пожаловать();Функции стрелок поначалу могут показаться незнакомыми и не очень читабельными, но ситуация быстро меняется по мере того, как глаза привыкают к структуре.
Они очень удобны для простых однострочных действий, когда нам просто лень писать много слов.
Стрелочные функции, которые мы видели до сих пор, были очень простыми. Они взяли аргументы слева от => , вычислили и вернули вместе с ними правое выражение.
Иногда нам нужна более сложная функция с множеством выражений и операторов. В этом случае мы можем заключить их в фигурные скобки. Основное отличие состоит в том, что фигурные скобки требуют return внутри них, чтобы вернуть значение (как это делает обычная функция).
Так:
let sum = (a, b) => { // фигурная скобка открывает многострочную функцию
пусть результат = a + b;
вернуть результат; // если мы используем фигурные скобки, то нам нужен явный «возврат»
};
Предупреждение(сумма(1, 2)); // 3Еще больше впереди
Здесь мы похвалили стрелочные функции за краткость. Но это еще не все!
У стрелочных функций есть и другие интересные особенности.
Чтобы изучить их более глубоко, нам сначала нужно познакомиться с некоторыми другими аспектами JavaScript, поэтому мы вернемся к стрелочным функциям позже в главе «Возврат к стрелочным функциям».
На данный момент мы уже можем использовать стрелочные функции для однострочных действий и обратных вызовов.
Стрелочные функции удобны для простых действий, особенно для однострочников. Они бывают двух вкусов:
Без фигурных скобок: (...args) => expression – правая часть представляет собой выражение: функция вычисляет его и возвращает результат. Круглые скобки можно опустить, если аргумент только один, например n => n*2 .
С фигурными скобками: (...args) => { body } – скобки позволяют нам писать несколько операторов внутри функции, но нам нужен явный return , чтобы что-то вернуть.
Замените функциональные выражения функциями стрелок в приведенном ниже коде:
функция Ask(вопрос, да, нет) {
если (подтвердить (вопрос)) да();
иначе нет();
}
просить(
"Вы согласны?",
function() { alert("Вы согласились."); },
function() { alert("Вы отменили выполнение."); }
);
функция Ask(вопрос, да, нет) {
если (подтвердить (вопрос)) да();
иначе нет();
}
просить(
"Вы согласны?",
() => alert("Вы согласились."),
() => alert("Вы отменили выполнение.")
);Выглядит коротким и чистым, не так ли?