Рассмотрим этот фрагмент кода:

a = 5;
var a;
console.log(a);

Если вы думаете, что пытаетесь вывести «неопределенное» значение переменной. К сожалению, вы ошибаетесь! Есть 2 шага для выполнения кода JavaScript. Первый этап компиляции, а второй этап выполнения.

Давайте рассмотрим пример кода поэтапно.

Этап компиляции:
Все объявления, как переменные, так и функции являются процессами на этом этапе.
«a = 5» — это не один оператор. JavaScript на самом деле думает об этом как о двух утверждениях: «var a» (объявление) и «a = 5» (присваивание).

var a; 
var a;

Этап выполнения:

a = 5;
console.log(a);  // 5