• Теория
  • Теория

Порядок параметров

В прошлом задании мы столкнулись со странным значением - NaN. Оно означает «not a number» и говорит о том, что невозможно найти результат математической операции. Разберём, откуда взялось NaN. Если у функции указан параметр, но аргумент не передан, то значение параметра в теле функции будет undefined — то есть «не определено». Арифметические операции с undefined дают NaN.

Функция calculateMiles ожидала получить число и, пока мы его не передали при вызове, не могла правильно работать:

let calculateMiles = function (distance) {
  …
  // Если аргумент не передан, в переменную запишется NaN
  let miles = distance * percent;
  …
}

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

Отвлечёмся ненадолго от подсчёта миль и поговорим о литературных предпочтениях. У нас есть функция getFavoriteBook, которая выводит в консоль сообщение о любимой книге пользователя. У неё есть два параметра: первый называется userName (имя пользователя), второй bookName (название книги).

let getFavoriteBook = function (userName, bookName) {
  console.log('Меня зовут ' + userName + '. Моя любимая книга: ' + bookName);
}

Допустим, нашего пользователя зовут Семён, а его любимая книга «Ёжик в тумане». Передадим эти аргументы в функцию. Сначала название книги, а затем имя пользователя:

let getFavoriteBook = function (userName, bookName) {
  // Параметр userName хранит 'Ёжик в тумане'
  // Параметр bookName хранит 'Семён'
  …
}

// Вызываем функцию
getFavoriteBook('Ёжик в тумане', 'Семён');
// Выведет: Меня зовут Ёжик в тумане. Моя любимая книга: Семён

Кажется что-то пошло не так. Почему мы получили такой результат? Мы ведь передали имя пользователя и название книги — всё, как положено.

Всё дело в порядке переданных значений. Параметры работают, как переменные — значение из аргумента записывается в параметр, а потом используется внутри функции по имени. В нашем случае всё так и произошло. Первый параметр функции — userName, первый аргумент — 'Ёжик в тумане'. Этот аргумент и записался в параметр userName, а аргумент 'Семён' стал параметром bookName. Вы, конечно, знаете, где тут имя, а где название книги, а вот JavaScript нет. Он всё понимает буквально: что первым передали, то и стало первым параметром. Потому что порядок аргументов соответствует порядку параметров в функции. У нас параметры записаны в таком порядке: userName, bookName. Значит, первым должно быть передано имя пользователя, а затем название книги. И никак иначе.

let getFavoriteBook = function (userName, bookName) {
  // Параметр userName хранит 'Семён'
  // Параметр bookName хранит 'Ёжик в тумане'
  …
}

// Вызываем функцию
getFavoriteBook('Семён', 'Ёжик в тумане');
// Выведет: Меня зовут Семён. Моя любимая книга: Ёжик в тумане

Видите, мы передали аргументы в правильном порядке и сообщение стало корректным.

Потренируемся вызывать функцию с разным порядком аргументов.

В примере мы работали со строками, ещё веселей обстоит ситуация с числами. Если в функцию в неправильном порядке переданы значения разных типов, например, числа и строки, могут получиться неожиданные результаты. Например, может произойти конкатенация и число сложится со строкой, результатом будет строка. Или вы можете получить значение NaN.

Хорошо владеете JavaScript, но до сих пор не освоили Node.js? Записывайтесь на профессиональный курс «Node.js. Профессиональная разработка REST API». Цена 12 000 ₽.

Минимальный вид табов
  • index.html
HTML
HTML

Вы перешли на другую страницу

Кликните внутри мини-браузера, чтобы поставить фокус в это окно.

100%
Бабушка Кекс

Притормози, дружище

Проходить вызовы части «Функции» тренажёра «Базовые структуры данных» можно после регистрации и оформления подписки.