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