В коде ниже:
(function (){
function test(){};//"function"
var test;//"undefined"
var printTest = typeof test;
document.write(printTest);
})();
printTest будет отображать «function» вместо «undefined», что имеет смысл, поскольку, насколько я понимаю, любые объявления переменных всегда «поднимаются» в верхнюю часть контекста выполнения (в данном случае это контекст выполнения функции) объявление функции "test ()" будет тем, которое появится позже в текущем контексте выполнения. Теперь рассмотрим этот код, где я фактически присваиваю значение объявлению var "var test = 1".
(function (){
function test(){};
var test=1;//assign value to a variable here
var printTest = typeof test;
document.write(printTest);
})();
Затем printTest теперь отображает «число», что означает, что контекст выполнения теперь поддерживает другой порядок. Может кто-нибудь объяснить, что на самом деле здесь произошло?