Задать вопрос
sergei2210
@sergei2210
Кратко о себе

Явный и не явный возврат функции, что это значит и в чем разница?

Может кто то по простому объяснить. И для чего это. Скажу сразу я читал, даже вопрос похожий нашел на ресурсе, но первое же предлежание меня озадачило.
  • Вопрос задан
  • 506 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
Явный:
через ключевое слово return.
Например:
function getTrue() {
  return true // явный возврат true
}
getTrue() // true

const getFalse = () => {
  return false // явный возврат false из стрелочной функции
}
getFalse()  // false

То есть Вы с помощью зарезервированного слова говорите "в слух" - вот тут я возвращаю такое то значение.

Неявный:
- Для обычных функций это когда функция не содержит слова return и возвращает undefined по умолчанию.
- Для стрелочных функций, когда функция записана в одну строку и не содержит слова return, но возвращает значение операции, описанной после =>. Если стрелочная функция с описанным в фигурных скобках телом функции, то так же как и для обычной функции. Если нет return, то undefined.

Например:
function getUndefined() {
  // какой то код, но нет return.
  console.log('Я тут что-то делаю, не обращайте внимания.')
}
getUndefined() // undefined

const getArrowValue = () => 'неявный'
getArrowValue() // "неявный"

То есть Вы нигде не говорите напрямую что возвращаете определённое значение с помощью зарезервированного ключевого слова.

И для чего это
Если честно даже не знаю что на это ответить. Чтоб было. Ну вот есть такие вот варианты и всё. Ну неявный в стрелочной чтоб было короче разве что.
Ну ещё немного подумав - неявный возврат из функции может быть только один - в самом конце функции. Явных возвратов в функции может быть несколько. Например если по условию нужно вернуть разные значения. При этом наличие явного возврата в функции не гарантирует что он сработает, опять же, если он находится под условием.
Например:
function conditionalReturn(value) {
  if (value === 1) {
    return 'one'
  }
  if (value === 2) {
    return 'two'
  }
}

conditionalReturn(1) // явно вернёт one
conditionalReturn(2) // явно вернёт two
conditionalReturn(3) // не явно вернёт undefined


UPD:
Так же асинхронная функция, объявленная через ключевое слово async, в неявном виде всегда возвращает Promise, даже если используется ключевое слово return - то значение после return будет обёрнуто в промис.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@alekcena
Нелинейный наставник
Когда вы что-то возвращаете.
Функция вернет это значение.(явный)
Если из функции вы ничего не возвращаете.
Вернется undefined(неявный)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы