- Теория
- Теория
Порядок параметров
В прошлом задании мы столкнулись со странным значением - 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
.
- index.html
Вы перешли на другую страницу
Кликните внутри мини-браузера, чтобы поставить фокус в это окно.