Найти в Дзене
Хочу в Сеньёры

IIFE + hosting [JS][Разбор задачи]

Добрый день как-то раз я наткнулся на задачку по теме hosting и ответил на угад, в итоге ответ был правильный. Мне захотелось разобраться почему именно так происходит.

Исходя из кода видно, что у нас есть переменная number изначально ей присваивается 5, а так же есть функция которая сразу же вызывается.

В этой функции у нас есть точно такая же переменная number только в этот раз она уже равна 10 и перед тем как ей присвоится 10, она выводится в консоль.

Теперь нужно понять что всё-таки происходит и почему в консоли оказалось undefined?

IIFE функция или любая другая функция обладает своей лексической областью видимости. На момент компиляции переменная которая объявлена через var будет поднята вверх и при этом она изначально будет равна undefined. Не смотря даже на то, что переменная в глобальной области видимость с именем number уже существует, в области видимости IIFE будет создана еще одна переменная с таким же именем. Движок при компиляции будет обращаться к той "которая находится ближе".

-2

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