0

Почему функции JavaScript всегда возвращают значение?

14

Я прохожу курс по программированию на JavaScript, и инструктор сказал, что типичная функция JavaScript всегда возвращает значение. Даже если мы не укажем явное значение для возврата, движки возвращают undefined.

Это действительно так? Если да, то почему?

2 ответ(ов)

0

Да, это верно. Фактически, когда функция не содержит явного оператора возврата, она действительно возвращает undefined. По сути, если вы присвоите переменной результат вызова такой функции, то результат будет равен undefined.

Редактирование

Я ошибся в своем первоначальном ответе. Вот соответствующий раздел спецификации:


13.2.1 [[Call]]

Когда внутренний метод [[Call]] для объекта функции F вызывается с указанным значением this и списком аргументов, выполняются следующие шаги:

  1. Пусть funcCtx будет результатом создания нового контекста выполнения для кода функции с использованием значения внутреннего свойства [[FormalParameters]] F, переданного списка аргументов и значения this, как описано в 10.4.3.
  2. Пусть result будет результатом выполнения тела функции, которое является значением внутреннего свойства [[Code]] F. Если у F нет внутреннего свойства [[Code]] или его значение – это пустое тело функции, то result равно (normal, undefined, empty).
  3. Выйдите из контекста выполнения funcCtx, восстанавливая предыдущий контекст выполнения.
  4. Если тип result — throw, то выбросьте result.value.
  5. Если тип result — return, то верните result.value.
  6. В противном случае тип result должен быть normal. Верните undefined.

Таким образом, в случае отсутствия явного возврата функция завершает выполнение, и JavaScript возвращает undefined автоматически.

0

В JavaScript функции действительно являются объектами. Поэтому вы всегда можете присвоить функцию переменной так же, как присваиваете любой другой объект. Интерпретатор в этом случае будет определять значение переменной (которое может быть undefined). Например:

function myFunction() {
  console.log("Hello, World!");
}

const myVar = myFunction; // Присваиваем функцию переменной

myVar(); // Вызовем функцию через переменную, получится вывод: "Hello, World!"

Если вы не присвоите функцию никакой переменной, она по-прежнему существует в памяти, но к ней будет сложно получить доступ, и вы получите undefined, если попытаетесь обратиться к ней по переменной, которая не была определена.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь