Перейти к содержанию
Educora
Начальный15 мин7 / 27

Функции и стрелочные функции

Разбивай код на повторно используемые части: объявление функций, параметры, `return`, значения по умолчанию, стрелочные функции и область видимости.

Проверь себя
В этом уроке ты узнаешь
  • Объявлять функцию с параметрами и вызывать её с аргументами
  • Возвращать результат через return и отличать это от console.log
  • Писать стрелочные функции и знать правила краткой записи
  • Различать локальные и глобальные переменные

Допустим, в интернет-магазине нужно посчитать цену со скидкой для каждого товара. Можно написать одни и те же три строки в десяти местах, но если в формуле найдётся ошибка, исправлять придётся десять раз. Вместо этого код один раз оформляют в функцию, дают ей имя и просто вызывают там, где нужно.

Объявление и вызов функции

Функцию объявляют ключевым словом function, после которого идут имя, параметры в круглых скобках и тело в фигурных. Объявить — ещё не значит выполнить: функция работает, только когда её вызывают, написав скобки после имени. Значения, передаваемые при вызове, называются аргументами.

JavaScript
function greet(name) {
  console.log(`Hello, ${name}!`);
}

greet('Aysel');
greet('Murad');
greet('Leyla');
▸ Ожидаемый результат
Hello, Aysel!
Hello, Murad!
Hello, Leyla!
name — параметр, а 'Aysel', 'Murad' и 'Leyla' — аргументы.

return: возврат результата

Часто функция что-то вычисляет и возвращает результат туда, откуда её вызвали. Для этого пишут return. Возвращённое значение можно сохранить в переменную, использовать в другом вычислении или вывести. Как только выполняется return, функция сразу завершается. Если return нет, функция возвращает undefined.

JavaScript
function calculateArea(width, height) {
  return width * height;
}

const room = calculateArea(4, 5);
console.log('Room:', room);
console.log('Two rooms:', calculateArea(3, 3) + calculateArea(2, 1));

function addNoReturn(a, b) {
  const sum = a + b;
}
console.log(addNoReturn(2, 3));
▸ Ожидаемый результат
Room: 20
Two rooms: 11
undefined

Параметру можно задать значение по умолчанию: оно используется, если аргумент не передан.

JavaScript
function orderTea(size = 'medium', sugar = 1) {
  return `${size} tea with ${sugar} sugar`;
}

console.log(orderTea());
console.log(orderTea('large'));
console.log(orderTea('small', 0));
▸ Ожидаемый результат
medium tea with 1 sugar
large tea with 1 sugar
small tea with 0 sugar

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

Стрелочная функция (arrow function) — современный и более краткий способ записи функции: вместо слова function после параметров ставится знак =>. Если тело — одно выражение, фигурные скобки и return не пишут: значение выражения возвращается автоматически. Скобки вокруг единственного параметра тоже можно опустить.

JavaScript
const square = (x) => x * x;
const add = (a, b) => a + b;
const shout = text => text.toUpperCase() + '!';
const sayHi = () => 'Hi!';

const describe = (name, age) => {
  const group = age >= 18 ? 'an adult' : 'a teenager';
  return `${name} is ${group}`;
};

console.log(square(7), add(2, 3));
console.log(shout('goal'), sayHi());
console.log(describe('Elvin', 15));
▸ Ожидаемый результат
49 5
GOAL! Hi!
Elvin is a teenager
JavaScript
const double1 = (n) => n * 2;
const double2 = (n) => { n * 2; };
const double3 = (n) => { return n * 2; };

console.log(double1(5), double2(5), double3(5));
▸ Ожидаемый результат
10 undefined 10

Область видимости и функции как значения

Переменная, созданная внутри функции, локальна: она существует только внутри этой функции. А переменную, созданную снаружи, можно читать изнутри функции. Это правило изолирует функции друг от друга и предотвращает конфликты имён.

JavaScript
const siteName = 'Educora';

function showScope() {
  const secret = 42;
  console.log(siteName, secret);
}

showScope();
console.log(typeof secret);
▸ Ожидаемый результат
Educora 42
undefined
За пределами функции secret не существует — это показывает typeof.

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

JavaScript
function repeat(times, action) {
  for (let i = 1; i <= times; i++) {
    action(i);
  }
}

repeat(3, (step) => console.log(`Step ${step}`));
▸ Ожидаемый результат
Step 1
Step 2
Step 3
Задание

Напиши стрелочную функцию toFahrenheit, которая переводит градусы Цельсия в градусы Фаренгейта. Формула: celsius * 9 / 5 + 32. Функция должна возвращать результат через return, а не печатать его — печатают строки ниже.

Задание · JavaScript
const toFahrenheit = (celsius) => {
  // return the temperature in Fahrenheit
};

console.log(toFahrenheit(0));
console.log(toFahrenheit(100));
console.log(toFahrenheit(-40));
▸ Ожидаемый результат
32
212
-40

Главное

  • Функция — это блок кода, который пишут один раз и вызывают много раз.
  • Параметры указывают при объявлении, аргументы — при вызове; у параметров могут быть значения по умолчанию.
  • return возвращает результат и завершает функцию; без него результат — undefined.
  • Стрелочная функция (a, b) => a + b автоматически возвращает одно выражение; с { } нужен return.
  • Переменные внутри функции локальны; функции можно передавать как значения (колбэки).

Проверь себя

Вопросов: 10. Каждый правильный ответ приносит XP.

1 / 10
Чем является 'Leyla' в вызове greet('Leyla')?