JavaRush /Курсы /Модуль 1: Web Core /Стрелочные функции: синтаксис, отличия, когда использоват...

Стрелочные функции: синтаксис, отличия, когда использовать

Модуль 1: Web Core
21 уровень , 8 лекция
Открыта

1. Что такое стрелочные функции?

Стрелочные функции — это современный способ объявления функций в JavaScript, появившийся в стандарте ES6 (2015). Их называют arrow functions из-за характерной стрелки => в синтаксисе.

Зачем нужны стрелочные функции?

  • Сокращают количество кода — особенно для коротких функций.
  • Удобны для передачи функций как аргументов — например, в методах массивов (map, filter, forEach).
  • По-другому работают с контекстом this — это иногда спасает, а иногда мешает (об этом ниже).

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

Вот классическая функция:

function add(a, b) {
  return a + b;
}

Вот то же самое, но стрелочной функцией:

const add = (a, b) => {
  return a + b;
};

Выглядит компактнее, правда? А если функция короткая, можно сделать её ещё компактнее:

const add = (a, b) => a + b;

Всё! Одна строка — и сразу понятно, что возвращается.

2. Синтаксис стрелочных функций

Давайте разберёмся с синтаксисом подробнее:

Основная форма

const имя = (параметры) => {
  // тело функции
};
  • Параметры указываются в круглых скобках.
  • После скобок — стрелка =>.
  • Затем — тело функции в фигурных скобках.

Однострочная стрелочная функция (неявный return)

Если функция состоит из одной инструкции и возвращает результат, можно опустить фигурные скобки и слово return:

const square = x => x * x;

Это то же самое, что:

const square = function(x) {
  return x * x;
};

Без параметров

Если у функции нет параметров, скобки всё равно нужны:

const sayHi = () => console.log("Привет!");

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

Если параметр один, скобки можно опустить:

const double = x => x * 2;

Но если параметров нет или больше одного — скобки обязательны:

const sum = (a, b) => a + b;
const random = () => Math.random();

Многострочные функции

Если тело функции занимает несколько строк — фигурные скобки обязательны, и тогда нужно явно писать return, если вы хотите что-то вернуть:

const getUser = (name, age) => {
  const user = {
    name: name,
    age: age
  };
  return user;
};

Возврат объекта

Есть одна ловушка: если вы хотите вернуть объект в однострочной стрелочной функции, нужно обернуть его в круглые скобки, иначе JavaScript подумает, что это тело функции!

const makeUser = (name, age) => ({ name: name, age: age });

// Без скобок — не работает:
const makeUserWrong = (name, age) => { name: name, age: age }; // undefined!

3. Где применять стрелочные функции?

Колбэки и методы массивов

Стрелочные функции особенно удобны для коротких функций-колбэков, например:

const numbers = [1, 2, 3, 4, 5];
const squares = numbers.map(n => n * n);

console.log(squares); // [1, 4, 9, 16, 25]

Или фильтрация:

const even = numbers.filter(n => n % 2 === 0);
console.log(even); // [2, 4]

Сортировка

const arr = [5, 2, 10, 1];
arr.sort((a, b) => a - b);
console.log(arr); // [1, 2, 5, 10]

4. Примеры: до и после

Пример 1. Сравнение с function expression

// Было
const greet = function(name) {
  return "Привет, " + name + "!";
};

// Стало
const greet = name => "Привет, " + name + "!";

Пример 2. Использование в map

const names = ["Вася", "Петя", "Маша"];
const greetings = names.map(name => `Привет, ${name}!`);
console.log(greetings);
// ["Привет, Вася!", "Привет, Петя!", "Привет, Маша!"]

Пример 3. Возврат объекта

const pairs = [ [1, 2], [3, 4] ];
const objects = pairs.map(([a, b]) => ({ a, b }));
console.log(objects);
// [ { a: 1, b: 2 }, { a: 3, b: 4 } ]

5. Как это связано с вашим приложением?

В вашем учебном приложении (например, простом todo-листе или калькуляторе), стрелочные функции пригодятся для обработки событий, перебора массивов задач, фильтрации и сортировки данных. Например, если у вас есть массив задач, и вы хотите получить только выполненные задачи:

const todos = [
  { title: "Почитать", done: true },
  { title: "Сделать дз", done: false }
];

const doneTodos = todos.filter(todo => todo.done);
console.log(doneTodos);
// [{ title: "Почитать", done: true }]

Или, например, для красивого вывода:

todos.forEach(todo => {
  console.log(`${todo.done ? "✔️" : "❌"} ${todo.title}`);
});

6. Типичные ошибки при работе со стрелочными функциями

Ошибка №1: Использование стрелочной функции как метода объекта.

Очень частая ошибка — объявить метод объекта стрелочной функцией и потом удивляться, что this не ссылается на сам объект:

const user = {
  name: "Катя",
  sayHi: () => {
    console.log(this.name); // undefined!
  }
};
user.sayHi();

Вместо этого используйте обычную функцию:

const user = {
  name: "Катя",
  sayHi() {
    console.log(this.name); // "Катя"
  }
};

Ошибка №2: Возврат объекта без скобок.

const makeUser = name => { name: name }; // undefined!

Исправление:

const makeUser = name => ({ name: name });

Ошибка №3: Слишком сложные однострочные стрелочные функции.

Иногда желание уместить всё в одну строку приводит к нечитаемому коду. Не бойтесь писать многострочные функции с фигурными скобками и явным return — читаемость важнее компактности.

1
Задача
Модуль 1: Web Core, 21 уровень, 8 лекция
Недоступна
Дебаунсинг ввода
Дебаунсинг ввода
1
Задача
Модуль 1: Web Core, 21 уровень, 8 лекция
Недоступна
Троттлинг прокрутки
Троттлинг прокрутки
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ