JavaScript: Создание (определение) функции
Определение собственных функций значительно упрощает написание и поддержку программ. Функции позволяют объединять сложные (составные) операции в одну. Например, отправка письма на сайте - это достаточно сложный процесс, включающий в себя взаимодействие с внешними системами (интернет). Благодаря возможности определять функции, вся сложность может быть скрыта за простой функцией:
import { send } from 'some-email-package';
const email = '[email protected]';
const title = 'Помогите';
const body = 'Я написал историю успеха, как я могу получить скидку?';
// Один маленький вызов — и много логики внутри
send(email, title, body);
Создадим нашу первую функцию. Её задача вывести на экран следующий текст:
Today is: December 5
// Определение функции
// Определение не вызывает функцию
// Мы лишь говорим, что теперь такая функция существует
const showCurrentDay = () => {
const text = 'Today is: December 5';
console.log(text);
};
// Вызов функции
showCurrentDay();
Для любознательных. Такая функция в JavaScript называется стрелочной. Она появилась со стандартом языка ES6. Далее мы будем работать только со стрелочными функциями.
Определение функции выше состоит из двух частей:
- Присваивание функции константе
- Непосредственно определение функции
Само по себе определение функции - это всё, что находится после присвоения:
// Обратите внимание на стиль
// Пробелы между символами
// Открывающая скобка там же где и стрелка
// Закрывающая на своей отдельной строчке
() => {
const text = 'Today is: December 5';
console.log(text);
};
Такое определение создает функцию, но не вызывает её. Поскольку это определение не связывается ни с каким именем (константой), то такой код — бесполезен, хотя и является синтаксически корректным.
Связывание функции с именем является обычным присваиванием. В этом смысле функции ведут себя как обычные данные, которые можно записывать в константы. Технически функцию можно присвоить и переменной, но так как функции неизменяемы, то смысла в этом нет.
const doSomething = /* определение любой функции */;
В отличие от обычных данных, функции выполняют действия, поэтому их имена практически всегда должны быть глаголами: «построить что-то», «нарисовать что-то», «открыть что-то».
Всё, что описывается внутри фигурных скобок {}
, называется телом функции. Внутри тела можно описывать любой код. Считайте, что это маленькая самостоятельная программа, набор произвольных инструкций. Тело выполняется ровно в тот момент, когда запускается функция. Причём каждый вызов функции запускает тело независимо от других вызовов. Кстати, тело может быть пустым:
// Минимальное определение функции, которая ничего не делает
const noop = () => {};
noop(); // вызов есть, а смысла нет
// Такая функция тоже бывает полезна
// Но это относится к продвинутым темам
Понятие «создать функцию» имеет много синонимов: «реализовать», «определить» и даже «заимплементить» (от слова implement). Все они встречаются в повседневной практике на работе.
Задание
Реализуйте функцию printMotto()
, которая печатает на экран фразу Winter is coming.
printMotto(); // => Winter is coming
Важное замечание! В задачах, в которых нужно реализовать функцию, эту функцию вызывать не нужно. Вызывать функцию будут автоматизированные тесты, которые проверяют ее работоспособность. Пример с вызовом выше показан только для того, чтобы вы понимали, как ваша функция будет использоваться.
Советы
Пожалуйста, авторизуйтесь, это необходимо для отслеживания прогресса выполнения уроков. Если у вас ещё нет учётной записи, то сейчас самое время создать аккаунт.