Кратко
СкопированоФункция возвращает результат, который будет передан в вызвавший её код. Для этого и используется ключевое слово return.
Пример
СкопированоПримеры использования return. Функция проверки возраста на совершеннолетие и функция создания строки заданной длины со случайным содержимым — просто введите произвольные числа 😎
Как пишется
Скопированоreturn используется только в функциях. Этот код приведёт к ошибке, так как не является функцией:
const result = 42if (result > 10) { return true}return false
const 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}const a = notify('Сообщение')const b = notifyFull('Сообщение')console.log(a === b)// true
function notify(msg, type) {
if (type === 'error') {
alert('ОШИБКА:' + msg)
}
alert(msg)
}
function notifyFull(msg, type) {
if (type === 'error') {
alert('ОШИБКА:' + msg)
}
alert(msg)
return undefined
}
const a = notify('Сообщение')
const b = notifyFull('Сообщение')
console.log(a === b)
// true
На практике
Скопированосоветует
Скопировано🛠 Благодаря return можно использовать результат работы функции где угодно. Например, в условиях или при формировании новых значений. Пример ниже использует функцию с return для проверки условия — действительно ли счёт игрока больше 100:
function checkScore(score) { return score > 100}const s1 = 10const s2 = 15const s3 = 20if (checkScore(s1)) alert('игрок 1 проходит')if (checkScore(s2)) alert('игрок 2 проходит')if (checkScore(s3)) alert('игрок 3 проходит')
function checkScore(score) {
return score > 100
}
const s1 = 10
const s2 = 15
const s3 = 20
if (checkScore(s1)) alert('игрок 1 проходит')
if (checkScore(s2)) alert('игрок 2 проходит')
if (checkScore(s3)) alert('игрок 3 проходит')
Чем вот такой вариант:
const s1 = 10const s2 = 15const s3 = 20if (s1 > 100) alert('игрок 1 проходит')if (s2 > 100) alert('игрок 2 проходит')if (s3 > 100) alert('игрок 3 проходит')
const s1 = 10
const s2 = 15
const s3 = 20
if (s1 > 100) alert('игрок 1 проходит')
if (s2 > 100) alert('игрок 2 проходит')
if (s3 > 100) alert('игрок 3 проходит')
Почему эффективнее?
- если условие проверки очков изменится — его придётся писать в нескольких местах.
- если условие будет состоять более чем из одной проверки, то
ifусложнится и его будет сложнее понимать. Функцию, дающую ответtrueилиfalseлегче читать в условном операторе.
Необходимо помнить, если выполнение функции завершилось не через return, то возвращаемое значение будет undefined;
Самый простой способ этого избежать — всегда добавлять return с каким-либо значением перед концом функции.
- Ещё
returnостанавливает выполнение функции. Обычно это ожидаемое поведение, но если про это забыть — возможны баги.