Синтаксис в стрелочных функциях считается одним из самых удобных и лаконичных для создания функций в JavaScript. «Функции-стрелки» (arrow functions) появились с выходом 6-ой редакции «ECMAScript 6» в июне 2015 года и с тех пор получили большую популярность среди разработчиков. Помимо краткости стрелочные функции не сильно отличаются от обычных, кроме как возможностью пробросить метод this
снаружи. Но пойдем по порядку.
const nameFunc = (param1, param2, param3) => expression
Это базовый синтаксис, когда требуется выполнить одну команду.
const nameFunc
- объявляем переменную, куда запишем нашу функцию. Вместо const может быть let
.
(param1, param2, param3)
- параметры функции (не более 255).
=>
- символ стрелочной функции.
expression
- тело функции (выражение) - эквивалентно { return expression; }
const countTheBooksOnTheShelves = (shelf1, shelf2, shelf3) => shelf1 + shelf2 + shelf3;
alert('На полках ' + countTheBooksOnTheShelves(10, 20, 30) + ' книг');
Эквивалентной записью в стиле Function Declaration будет
function countTheBooksOnTheShelves(shelf1, shelf2, shelf3) {
return shelf1 + shelf2 + shelf3;
}
alert('На полках ' + countTheBooksOnTheShelves(10, 20, 30) + ' книг');
Стоит отметить, что параметры в стрелочной функции, как и при других записях, могут отсутствовать, в этом случае круглые скобки сохраняются.
const howManyBooksToReadInJS = () => 'Нужно прочитать 1 хорошую книгу по JavaScript - главное не теория, а практика!';
alert(howManyBooksToReadInJS());
Если параметр только один - круглые скобки можно опустить.
const showFavoriteProgrammingLanguage = langName => alert('Мой любимый язык программирования ' + langName);
showFavoriteProgrammingLanguage('JavaScript');
Все стрелочные функции являются анонимными, которые в свою очередь записываются в переменные. Если допустить ошибку в функции, в console будет видно имя переменной в которую она записана.
Одной из полезных особенностей стрелочных функций является возможность выбрать тот или иной expression (выражение функции) в зависимости от условий.
let jsPracticeTime = prompt("Сколько часов в день вы практикуете JavaScript?", );
let showJSLearningIntensity = (jsPracticeTime >= 3) ?
() => alert('Вы на правильном пути!') :
() => alert("Надо больше уделять времени практике!");
showJSLearningIntensity();
В данном примере используются стрелочная функция и тернарный (условный) оператор ?
. По началу подобные записи могут только путать, однако с практикой они будут восприниматься намного легче.
Когда записать выражение в одну строку не получается, синтаксис стрелочной функции немного меняется.
let showNamesOfTheProfessionJSProgrammer = () => {
let name1 = 'Frontend Developer';
let name2 = 'WEB-разработчик';
let name3 = 'TypeScript Developer';
return name1 + name2 + name3;
}
alert('Ключевые слова для поиска работы JS разработчиком: ' + showNamesOfTheProfessionJSProgrammer());
При такой записи появляются фигурные скобки {}
и return
, который уже обязателен, чтобы получить результат.
Стрелочные функции - это один из способов написания функции наряду с Function Declaration и Function Expression. «Функции-стрелки» отличают: лаконичность синтаксиса, наглядность, особенность работы с this
и необязательным return
при однострочной записи. В свою очередь возможности работы с this
являются особой изюминкой стрелочных функций, которая и придает им особую ценность.