Кратко
Секция статьи "Кратко"Функция возвращает результат, который будет передан в вызвавший её код. Для этого и используется ключевое слово return
Пример
Секция статьи "Пример"Примеры использования return. Функция проверки возраста на совершеннолетие и функция создания строки заданной длины со случайным содержимым — введи произвольные числа и попробуй 😎
Как пишется
Секция статьи "Как пишется"return
используется только в функциях:
// Этот код приведет к ошибке, так как не является функциейvar result = 42if (result > 10) { return true}return false
// Этот код приведет к ошибке, так как не является функцией var result = 42 if (result > 10) { return true } return false
// А этот код верныйfunction isAdult(age) { return age > 18}
// А этот код верный function isAdult(age) { return age > 18 }
Как это понять
Секция статьи "Как это понять"Определённый код «сгруппирован» и объединён в функцию, например проверка — чётное число или нет:
Код функции:
Секция статьи "Код функции:"function isEven(value) { if (undefined === value || null === value) { return false } return value % 2 == 0}
function isEven(value) { if (undefined === value || null === value) { return false } return value % 2 == 0 }
Пример
Секция статьи "Пример"Для возврата значения используется директива return
Она может находиться в любом месте функции. Как только до неё доходит управление — функция завершается и значение передаётся обратно.
Писать return
в функции не обязательно. Рассмотрим пример:
function notify(msg, type) { if (type === "error") { alert("ОШИБКА:" + msg) } alert(msg)}
function notify(msg, type) { if (type === "error") { alert("ОШИБКА:" + msg) } alert(msg) }
Такой функции нечего возвращать, она служит только для группировки набора команд.
Несмотря на отсутствие return, такая функция будет возвращать undefined
, будто бы в ней последней строчкой написано return undefined;
Ниже пример, который показывает что это действительно так:
function notify(msg, type) { if (type === "error") { alert("ОШИБКА:" + msg) } alert(msg)}function notifyFull(msg, type) { if (type === "error") { alert("ОШИБКА:" + msg) } alert(msg) return undefined}var a = notify("Сообщение")var b = notifyFull("Сообщение")alert(a === b)
function notify(msg, type) { if (type === "error") { alert("ОШИБКА:" + msg) } alert(msg) } function notifyFull(msg, type) { if (type === "error") { alert("ОШИБКА:" + msg) } alert(msg) return undefined } var a = notify("Сообщение") var b = notifyFull("Сообщение") alert(a === b)
На практике
Секция статьи "На практике"🛠 Благодаря return можно использовать результат работы функции где угодно, например в условиях или формировании новых значений. Пример ниже использует функцию с return для проверки условия — действительно ли счёт игрока больше 100:
function checkScore(score) { return score > 100}var s1 = 10var s2 = 15var s3 = 20if (checkScore(s1)) alert("игрок 1 проходит")if (checkScore(s2)) alert("игрок 2 проходит")if (checkScore(s3)) alert("игрок 3 проходит")
function checkScore(score) { return score > 100 } var s1 = 10 var s2 = 15 var s3 = 20 if (checkScore(s1)) alert("игрок 1 проходит") if (checkScore(s2)) alert("игрок 2 проходит") if (checkScore(s3)) alert("игрок 3 проходит")
Чем вот такой вариант:
var s1 = 10var s2 = 15var s3 = 20if (s1 > 100) alert("игрок 1 проходит")if (s2 > 100) alert("игрок 2 проходит")if (s3 > 100) alert("игрок 3 проходит")
var s1 = 10 var s2 = 15 var s3 = 20 if (s1 > 100) alert("игрок 1 проходит") if (s2 > 100) alert("игрок 2 проходит") if (s3 > 100) alert("игрок 3 проходит")
Почему эффективнее?
- если условие проверки очков изменится — его придётся писать в нескольких местах
- если условие будет состоять более чем из одной проверки? Тогда
if
усложнится и его будет сложнее понимать. Функцию, дающую ответ true или false легче читать в условном операторе.
Необходимо помнить, если выполнение функции завершилось не через return
, то возвращаемое значение будет undefined
;
Самый простой способ этого избежать — всегда добавлять return
с каким-либо значением перед концом функции.
- Ещё
return
останавливает выполнение функции. Обычно это ожидаемое поведение, но если про это забыть — возможны баги.