Странное поведение в функции подъема
Я написал ниже сценарий и выполнен в блокноте.
baz();
var baz = function(){
console.log("Hello World");
}
Когда я пытаюсь выполнить приведенный выше сценарий, я получаю вид исключения ниже. Я знаю, это выражение происходит потому, что подъем недопустим для выражений функций.
/*
Exception: TypeError: baz is not a function
@Scratchpad/1:1:1
*/
Теперь я заменил имя функции "baz" на "say_hello" и перезапустил приложение, оно работает нормально без исключения. Есть ли причина для такого поведения?
say_hello();
var say_hello = function(){
console.log("Hello World");
}
1 ответ
say_hello();
function say_hello(){
console.log("Hello World");
}
Это тот, который действительно работает нормально без исключения
Причина в том, что:
JavaScript только поднимает объявления (объявления переменных и функций), но не инициализации
Если переменная объявлена и инициализирована после ее использования, значение будет неопределенным. Например:
console.log(num); // Returns undefined
var num;
num = 6;
Если вы объявите переменную после ее использования, но предварительно инициализируете ее, она вернет значение:
num = 6;
console.log(num); // returns 6
var num;
Для получения дополнительной информации: только декларации подняты