У меня есть следующий код, где я объявляю функцию, а после нее переменную с тем же именем, что и у функции:
function a(x) {
return x * 2;
}
var a;
alert(a);
Я ожидал, что это предупредит undefined
, но если я его запущу, предупреждение отобразит следующее:
функция a(x) {
возвращает x * 2
}
Если я назначу значение переменной (например, var a = 4
), предупреждение отобразит это значение (4
), но без этого изменения a
будет распознано как функция.
Почему это происходит?
var a
вы создаете новую переменную. Объявление фактически поднимается до начала текущей области (перед определением функции). После этого имя используется одноименной функцией. Это то, что вы получаете при использованииalert()
. - person Sirko   schedule 18.11.2016