function hoisting sample 1 - garevna/js-course GitHub Wiki
:arrow_backward: hoisting
:coffee: 1
function delegat () {
console.log ( x )
y = x + 5
console.log ( y )
x = 5, y = 10
return x * 4 + y / 2
var x = 1, y = 1
}
Хотя объявление переменных x и y стоит в коде после оператора return, при формировании контекста исполнения на первом этапе будет формироваться объект активации ( Lexical Environment ), и все переменные, объявленные внутри функции, будут включены в этот объект
Таким образом, объявление переменных x и y "поднимется" ( произойдет до начала выполнения кода функции )
Но присваивание значений происходит уже на втором этапе, и код будет выполняться последовательно, то есть на момент исполнения кода
console.log ( x )
значение переменной x еще не будет определено, поэтому в консоли будет undefined
Аналогично, на момент выполнения кода
y = x + 5
значение переменной x будет undefined, поэтому результатом операции присваивания будет NaN, что и выдаст в консоль код
console.log ( y )
После этого будет выполнен код
x = 5, y = 10
Переменные x и y получат значения
Поэтому функция вернет значение 25
Присваивание значений
x = 1, y = 1
не произойдет, поскольку выход из контекста выполнения будет раньше этого кода
:arrow_backward: hoisting