Кратко
СкопированоФункция возвращает результат, который будет передан в вызвавший её код. Для этого и используется ключевое слово 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
останавливает выполнение функции. Обычно это ожидаемое поведение, но если про это забыть — возможны баги.