Извините за этот вопрос, но эта проблема действительно испортила мой день.
Следующий код предупреждает 10 как следует:
var globalId='10';
function check(){
alert(globalId);
}
check();
Но этот следующий код предупреждает undefined:
var globalId='10';
function check(){
alert(globalId);
var globalId;
}
check();
Мне известно, что если я объявляю переменную в функции своей локальной переменной, но если я уже объявил ее глобальным, как может быть, что мои предупреждения говорят undefined?
Это простой пример, но в моем исходном коде я сделал много вещей между началом функции, а затем до конца я проверил, было ли определено globalId
, иначе определите его: if(!globalId){var globalId;}
Это означало, что мое оповещение, расположенное в верхней части функции, сгенерировало undefined, как если бы JavaScript сначала выполнил всю функцию, просто чтобы узнать, могут ли быть объявлены какие-либо переменные, и если да, объявите их, и поэтому мое предупреждение указывает к "необъявленной" переменной.
Может кто-нибудь объяснить мне, почему это происходит, и если это правда, что JavaScript "предварительно объявляет" все переменные перед выполнением функции, даже переменные, объявленные в условиях, даже не встречающихся?