Стрелочные функции в JS

Как использовать стрелочные функции в JS (JavaScript)

10.02.2024
382
7 мин.
0

После выхода спецификаций ECMAScript 6 стрелочные функции в JS (JavaScript) стали самыми популярными по сравнению с другими. Их синтаксис позволяет быстро задавать функции как с параметрами, так и без них. Их ключевое преимущество — возможность отказаться от фигурных скобок и ключевых слов function и return.

На первый взгляд такой синтаксис может показаться странным, но с ним стоит ознакомиться. Это не только экономит время написания кода, но и позволяет сделать его более читабельным.

Базовый синтаксис согласно Mozilla Developer Network:

( param1, param2, ..., paramN ) => { statements }

Мы рассмотрим несколько реальных примеров, как создавать стрелочные функции в JavaScript в различных сценариях. Кроме того, мы сравним их синтаксис с обычными функциями.

Стрелочные функции в JS и их отличия от обычных

Самый простой вариант синтаксиса таких функций — это когда в функции отсутствуют параметры. В приведённом ниже примере синтаксис ECMAScript 5 демонстрирует объявление функционального выражения (function expression) и присваивает его переменной birthday. Код выводит в консоль простую текстовую строку со словами «С днём рождения!».

var birthday = function() {
 return "С днём рождения!";
}

console.log( birthday() );

В синтаксисе стрелочных функций ключевые слова function и return не используются. Он занимает только одну строку. Пустые круглые скобки указывают на то, что функция не имеет никаких параметров, а стрелка привязывает тело функции к параметрам (отсутствуют в настоящем примере).

var birthday = () => "С днём рождения!";

console.log( birthday() );

Один параметр

Давайте расширим предыдущий пример одним параметром name. Старый синтаксис ES5 предусматривает присвоение его значения к возвращаемой строке.

var birthday = function( name ) {
   return 'Happy birthday, ' + name + '!';
}

console.log( birthday( 'John' ) );

Синтаксис стрелочной функции в JavaScript, по сути, делает то же самое. Нужно заключить в круглые скобки параметр name, разместив его перед стрелкой, и опустив ключевое слово return в функциональном блоке.

var birthday = ( name ) => 'Happy birthday, ' + name + '!' ;

console.log( birthday( 'Jane' ) );

Два параметра

Стрелочные функции в JS
Чем отличается использование стрелочных функций в JS (JavaScript) (изображение создано с помощью ИИ)

Стрелочные функции в JavaScript можно использовать с любым количеством параметров. Например, если взять тот же пример с двумя параметрами (age и name). Теперь функция birthday() требует двух входных данных для возврата строки. Сначала давайте используем ECMAScript 5.

var birthday = function( age, name) {
   return 'Happy ' + age + 'th birthday, ' + name + '!';
}

console.log( birthday( 30, 'John' ) );

Аналогичный код согласно спецификации ES6.

var birthday = ( age, name ) => 'Happy ' + age + 'th birthday, "'+ name + '!';

console.log( birthday( 32, 'Jane' ) );

Если объявление функции (function declaration) слишком длинное или занимает несколько строк, то его также можно заключить в фигурные скобки. Однако, в этом случае всегда приходится добавлять ключевое слово return в функциональный блок.

var birthday = ( age, name ) => {
   return 'Happy ' + age + 'th birthday, ' + name + '!'
};

console.log( birthday( 34, 'James' ) );

Стрелочные функции в JavaScript и условные операторы

Стрелочные функции в JS могут быть отличным выбором, если вы хотите использовать условные операторы внутри функционального блока. Следующий скрипт определяет простой переключатель, в котором параметр состояния указывает, включён он или нет.

var switcher = function( state ) {
   if( state == 'on' ) {
      return 'Switched on!';
   } else if ( state == 'off' ) {
      return 'Switched off!';
   } else {
      return 'Switcher not working!';
   }
}

console.log( switcher( 'on' ) );

Поскольку блок if-else занимает несколько строк, нужно использовать ключевое слово return внутри каждой части блока. Кроме этого, можно написать стрелочную функцию таким же образом, как и раньше.

var switcher = ( state ) => {
   if( state == 'on' ) {
      return 'Switched on!';
   } else if ( state == 'off' ) {
      return 'Switched off!';
   } else {
      return 'Switcher not working!';
   }
}

console.log( switcher( 'off' ) );

Объектные литералы

Вы также можете использовать синтаксис стрелочных функций в JavaScript, который позволяет пользователям устанавливать значение объектных литералов. Функция setBirthday(), приведённая ниже, позволяет пользователям устанавливать имя и возраст человека, у которого день рождения.

var setBirthday = function( name, age ) {
   return {
      name: name,
      age: age
   }
}

console.log( setBirthday( 'John', 30 ) );

Стрелочная функция в этом случае потребует всего лишь одной строки кода.

var setBirthday = ( name, age ) => ({ name: name, age: age });

console.log( setBirthday( 'Jane', 32 ) );

Работа с массивами

Можно использовать функции со стрелками для манипулирования массивами в JavaScript. Например, давайте взглянем на массив persons, который включает в себя три объектных литерала, каждый из которых имеет свойство name и age.

var persons = [
   { name: 'John', age: 30 },
   { name: 'Jane', age: 32 },
   { name: 'James', age: 34 }
];

Встроенный в JavaScript метод map() позволяет вызывать одну и ту же функцию для каждого элемента массива. Используя спецификацию ES5, можно вернуть свойство name каждого пользователя следующим образом.

var haveBirthday = persons.map( function(person) {
   return person.name;
});

console.log( haveBirthday );

С помощью стрелочной функции эта задача выполнима одной строкой.

var haveBirthday = persons.map( person => person.name );

console.log( haveBirthday );

Когда не стоит применять стрелочные функции в JavaScript

Хотя этот вариант функций имеет множество вариантов использования, они также обладают и некоторыми ограничениями. Существуют некоторые сценарии, когда их нельзя или не стоит использовать.

Во-первых, с их помощью нельзя создавать конструкторы. Использование ключевого слова new вместе с синтаксисом стрелочных функций приведёт к ошибке в консоли. Это происходит потому, что JavaScript обрабатывает такие функции так же, как и методы объекта. В результате, у них не может быть собственных методов, что является характеристикой объектов в JS.

Во-вторых, вы не можете использовать синтаксис ES6 для объявления объектных литералов и функций обратного вызова, содержащих методы, использующие ключевое слово this. Дело в том, что стрелочные функции в JavaScript обрабатывают их иначе.

Читайте также: Как удалить пустую строку из массива в JavaScript.

Заключение

Функции со стрелками предоставляют разработчикам полезный вариант сокращённого написания функциональных выражений в JavaScript. Их синтаксис имеет множество вариантов использования, поэтому он быстро стал любимым способом написания функций среди разработчиков. При правильном использовании они могут сэкономить много времени написания кода и улучшить его читаемость.