Создание новых функций

Вы не ограничены использованием функций других людей — вы также можете писать их самостоятельно. Это довольно просто! Давайте создадим функцию makeMoreExciting, которая добавляет несколько восклицательных знаков в конец строки.

function makeMoreExciting(string) {
  return string + '!!!!'
}

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

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

Создание новых функций

Выражение string + '!!!!' возвращает новую строку, и наша переменная с именем string остается такой же, как и раньше (так как мы не обновляли с помощью =.

Давайте использовать нашу функцию вместо того, чтобы делать это вручную. Сначала вставьте функцию в консоль, а затем вызовите функцию, передав строку:

Создание новых функций

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

Создание новых функций

Строка makeMoreExciting(выражение) эквивалентна выражение + '!!!!'. Что, если мы хотим изменить на месте (или обновить) значение строки? Просто сохраните возвращаемое значение функции обратно в нашу переменную выражения:

var sentence = "time for a nap"
sentence = makeMoreExciting(sentence)

Теперь в строке будут восклицательные знаки!

Обратите внимание! Вы должны использовать var только при инициализации переменной — при первом использовании.

После этого вам не следует использовать var, если вы не хотите повторно инициализировать переменную.

Что произойдет, если мы уберем оператор return в нашей функции?

Создание новых функций

Почему выражение пустое? Потому что функции возвращает undefined по умолчанию!

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

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

function yellIt(string) {
  string = string.toUpperCase()
  string = makeMoreExciting(string)
  console.log(string)
}

Эта функция yellIt использует нашу предыдущую функцию makeMoreExciting, а также встроенный метод для строк (String) toUpperCase.

Методы — это просто имя функции, когда она принадлежит чему-то — в этом случае toUpperCase — это функция, которая принадлежит string, поэтому мы можем ссылаться на нее как на метод или функцию.

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

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

Создание новых функций

Может быть что-то не так с вышеуказанной функцией yellIt? Вот два основных типа функций:

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

console.log является примером функции второго типа: она выводит данные в консоль — действие, которое вы можете увидеть своими глазами, но которое нельзя представить в виде значения JavaScript.

Мое эмпирическое правило состоит в том, чтобы попытаться отделить два типа функций друг от друга, поэтому вот как я бы переписал функцию yellIt:

function yellIt(string) {
  string = string.toUpperCase()
  return makeMoreExciting(string)
}

console.log(yellIt("i fear no human"))

Таким образом, yellIt становится более общим, то есть он выполняет только одну или две простые задачи и ничего не знает о печати себя в консоли — эту часть всегда можно запрограммировать позже, вне определения функции.

Была ли эта страница полезной?