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

Рейтинг: 2Ответов: 2Опубликовано: 13.02.2023

Может кто-то по-простому объяснить, какая разница между явным и не явным возвратом функции и что это значит?

Ответы

▲ 5

Любая функция в JavaScript что-то возвращает. Если вы руками в функции написали ключевое слово return - то это явный возврат. Будет явно возвращено указанное значение: return 'a' вернет строку 'a', просто return; вернет undefined.

Если же ключевое слово return отсутствует, то такой возврат называется неявным. Что именно будет возвращено, зависит от сигнатуры функции. В большинстве случаев это будет undefined, но в случае с, например, асинхронными функциями, будет неявно возвращен Promise, который разрешается в undefined.

Можно сделать функцию, которая имеет как явное, так и неявное возвращаемое значение:

function foo () {
  if (condition) return "bar";
}

Здесь мы явно возвращаем "bar" если выполняется условие. В противном случае будет неявно возвращен undefined.

Единственные 2 случая, когда функция не возвращает никакого значения, это в случаях:

  1. Использования оператора yield (но при этом рано или поздно, если не выполняется второй пункт, все равно будет что-то возвращено. Просто не сразу)
  2. Если функция выбрасывает исключение

Просто вопрос терминологии, не забивайте себе этим голову особо.

▲ 4

Неявный и явный возврат

У нас есть несколько способов написания наших стрелочных функций. Это потому, что стрелочные функции могут иметь ключевое слово «подразумеваемый возврат» или «явный возврат».

В обычных функциях, если вы хотите что-то вернуть, вам нужно использовать ключевое слово return. В стрелочных функциях тоже есть return. Когда вы используете return, это называется явным возвратом . Тем не менее, стрелка позволяет делать так называемый подразумеваемый возврат, когда return ключевое слово можно пропустить. Давайте посмотрим на несколько примеров:

Пример 1: нормальное функциональное выражение

const sayHi = function(name) {
  return name;
}

Пример 2: стрелочная функция с явным возвратом

    // Multi-line
    const sayHi = (name) => {
      return name;
    }

 
// Single-line
const sayHi = (name) => { return name }

Пример 3: стрелочная функция с неявным возвратом

// Single-line
const sayHi = (name) => name
 
// Multi-line
const sayHi = (name) => (
  name = 'Hi, ' + name,
  name
)

Когда вы используете фигурные скобки {}, вам нужно явно указать возврат. Однако, когда вы не используете фигурные скобки, return подразумевается, и вам этого делать не нужно.

Более подробно можно почитать тут https://ivan-shamaev.ru/javascript-notes-for-web-development/#i-7

что это значит

Ответ мне видится таким - это просто некое синтаксическое сокращение

в чем разница?

Визуальная - в наличии или отсутствии return.

В использовании никакой разницы нет. Функция как функция.