function scope sample 4 - garevna/js-course GitHub Wiki
:arrow_backward: scope
:coffee: 4
var __num = 1
function __showNum () {
console.info ( "Вошли в контекст исполнения функции __showNum" )
console.info ( `__num === ${__num}` )
return
function __num () {}
}
__showNum ()
console.info ( "Вышли из контекста исполнения функции __showNum" )
console.info ( `Теперь __num === ${__num}` )
В этом примере показано, как работает механизм hoisting
Переменная __num объявляется в глобальной области видимости с присвоением ей значения 1
Внутри тела функции __showNum после оператора return объявляется функция __num
На первый взгляд, при последовательном выполнении кода это объявление не должно сработать, поскольку оператор return стоит выше
Однако все объявления собираются в объект активации до того, как код начинает выполняться
Поэтому на момент, когда начнется выполнение кода функции __showNum, функция __num будет уже объявлена и будет благополучно находиться в Lexical Environment функции __showNum
Благодаря этому объявления переменных и функций "поднимаются" в области видимости "родителя" ( в нашем случае "родителем" является функция __showNum )
Убедиться в этом позволяет вывод в консоль переменной __num
После завершения выполнения кода функции __showNum ее контекст будет "демонтирован", и опять активным станет глобальный контекст, в котором переменная __num имеет значение 1
:arrow_backward: scope