В JavaScript оба функции декларации и объявления переменных поднимаются к верхней части функции, если они определены в функции или в верхней части глобального контекста, если вне функции. И объявление функции имеет приоритет над объявлениями переменных (но не над присвоением переменной).
Функция Декларация Overrides Variable Декларация Когда водрузили
Сначала вы объявляете переменную:
var a; // value of a is undefined
Во-вторых, значение a
является функцией, поскольку объявление функции имеет приоритет над объявлениями переменных (но не над переменным назначением):
function a(x) {
return x * 2;
}
И это то, что вы получаете, когда звоните alert(a);
.
Но если вместо объявления переменной вы назначаете переменное назначение: var a = 4;
, чем присвоенное значение 4
будет преобладать.
Что вы ожидали бы? Переменные и функции используют одно и то же пространство имен в JavaScript, поэтому они переопределяют друг друга. – Sirko
@Sirko Я бы ожидал, что undefined – joesid
, если имя функции и имя переменной совпадают, то JS Engine игнорирует эту переменную. –