Добрый день как-то раз я наткнулся на задачку по теме hosting и ответил на угад, в итоге ответ был правильный. Мне захотелось разобраться почему именно так происходит.
Исходя из кода видно, что у нас есть переменная number изначально ей присваивается 5, а так же есть функция которая сразу же вызывается.
В этой функции у нас есть точно такая же переменная number только в этот раз она уже равна 10 и перед тем как ей присвоится 10, она выводится в консоль.
Теперь нужно понять что всё-таки происходит и почему в консоли оказалось undefined?
IIFE функция или любая другая функция обладает своей лексической областью видимости. На момент компиляции переменная которая объявлена через var будет поднята вверх и при этом она изначально будет равна undefined. Не смотря даже на то, что переменная в глобальной области видимость с именем number уже существует, в области видимости IIFE будет создана еще одна переменная с таким же именем. Движок при компиляции будет обращаться к той "которая находится ближе".
В итоге мы имеем, что у нас движок обращается к переменной которая находится в текущей области видимости, но ещё не проинициализированная и поэтому консоль нам выводит undefined.