Предварительные требования: необходимо иметь представление о контексте выполнения javascript

Javascript несколько странен, когда дело доходит до того, как генерируется его контекст выполнения, и это привело разработчиков в некоторое замешательство. Это был долгий путь для javascript, и пришло время реализовать некоторые передовые концепции, чтобы мы могли выбраться из страданий, в которых мы находимся. Теперь, как разработчик внешнего интерфейса, я всегда был сбит с толку тем, как код выполняется для некоторых степень. Возьмем самую популярную тему про javascript и попытаемся понять, что же это такое на самом деле.

Подъем?

Все ребята, которые занимаются разработкой javascript, слышали это слово в какой-то момент своей карьеры. Подъем, передовая концепция, которая в какой-то момент нашей жизни смутит всех нас. Что ж, давайте углубимся в это понятие. Сначала посмотрите на сегмент кода и решите, что он выведет!

var variable_one = "Executing variable_one";
function f1(){
    console.log('executing f1 function');
}
f1();
console.log(variable_one);

Как вы и предполагали, этот код приведет к следующему выводу консоли.

executing f1 function
Executing variable_one

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

f1();
console.log(variable_one);
var variable_one = "Executing variable_one";
function f1(){
    console.log('executing f1 function');
}

Теперь это приведет к выводу как таковому.

executing f1 function
undefined

Обратите внимание, что вывод изменился с первого на второй.? Если мы изменим приведенный выше код и удалим объявление variable_one, это вызовет ошибку как таковую.

Uncaught ReferenceError: переменная_on не определена

Что ж, в javascript контекст выполнения изначально считывает весь код и создает необходимые выделения памяти для требуемых переменных, таким образом создавая заполнители для каждой из переменных/функций, с которыми сталкивается компилятор. Контекст выполнения виртуальной машины javascript выделяет место в памяти для каждой имеющейся у нее переменной, и если она выполняется до присвоения значения, она показывает, что значение переменной не определено.

Разработчики часто неправильно понимают это и думают, что все переменные определяются в верхней части кода самой виртуальной машиной, в то время как на самом деле происходит то, что виртуальная машина создает ячейки памяти для переменных, с которыми она сталкивается.