Sobes.tech
Назад к вопросам
Middle
4

Если объявить функцию, а после неё объявить переменную — будет ли к ней доступ внутри функции? Расскажи про hoisting.

Компании, где спрашивали
Data World

Ответ от нейросети

sobes.tech AI

В JavaScript переменные и функции подвергаются механизму, называемому hoisting — подъёмом объявлений в начало области видимости.

Если объявить функцию, а после неё объявить переменную с тем же именем, то внутри функции доступ к переменной зависит от способа объявления:

  • Переменные, объявленные через var, поднимаются, но инициализируются значением undefined до выполнения кода.
  • Функции полностью поднимаются, то есть их объявление и тело доступны до места объявления.

Пример:

function test() {
  console.log(a); // undefined
  var a = 5;
  console.log(a); // 5
}

test();

Здесь var a поднимается, но инициализация происходит на месте, поэтому первый console.log выведет undefined.

Если же объявить функцию и потом переменную с тем же именем вне функции, внутри функции будет доступна функция, так как объявления функций поднимаются выше переменных.

Таким образом, hoisting — это механизм, при котором объявления переменных и функций поднимаются в начало своей области видимости, но инициализация переменных происходит в месте объявления.