Есть еще один очень простой и лаконичный синтаксис для создания функций, который зачастую лучше, чем функциональные выражения.
Это называется «стрелочными функциями», потому что выглядит вот так:
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("Вы отменили выполнение.") );
Выглядит коротким и чистым, не так ли?