Взять например:
x = 5;
var x;
console.log( x );
Технически, вы можете рассматривать x = 5;
как неправильное утверждение в этом контексте, учитывая тот факт, что оно предшествует объявлению, но JS Engine не работает таким образом. Он видит x = 5
и var x
как два отдельных оператора: первый - задачу, связанную с компилятором, а второй - задачу, связанную с выполнением.
что это означает в простых терминах, так это то, что все объявления в области видимости, независимо от того, где они появляются, обрабатываются в первую очередь перед выполнением самого кода. то есть вы можете выполнить переменную перед ее объявлением.