Почему локальная переменная убивает мою глобальную переменную?

Извините за этот вопрос, но эта проблема действительно испортила мне день.

Следующий код предупреждает 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 «предварительно объявляет» все переменные перед выполнением функции, даже переменные, объявленные в условиях, которые даже не выполняются?

25
задан Helen 31 March 2011 в 11:40
поделиться