Странное поведение в функции подъема

Я написал ниже сценарий и выполнен в блокноте.

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;

Для получения дополнительной информации: только декларации подняты

Другие вопросы по тегам