return

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

Кратко

Секция статьи "Кратко"

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

        
        
          
        
      

На практике

Секция статьи "На практике"

doka-dog

Секция статьи "doka-dog"

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