Клавиша / esc

return

Возвращаем результат из функции.

Время чтения: меньше 5 мин

Кратко

Скопировано

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