Это потому, что в JavaScript, если объявляются функция и переменная с одинаковым именем и областью действия, они отображаются так:
Если переменная имеет значение или получает значение в любой точке, она поднимается наверх и имеет приоритет.
Если переменная создана, но имеет значение undefined
(например, var x;
), то функция имеет приоритет.
Это не происходит, когда вы явно устанавливаете значение undefined
, например var x = undefined
Вот почему это происходит ( получает значение в любой точке )
function x() {}
var x;
x = 4;
console.log(typeof x);
То же самое здесь - даже с нечетной переменной и размещением функции, потому что переменная получает значение:
var x;
function x() {}
x = 5;
console.log(typeof x);