Извините за этот вопрос, но эта проблема действительно испортила мне день.
Следующий код предупреждает 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 «предварительно объявляет» все переменные перед выполнением функции, даже переменные, объявленные в условиях, которые даже не выполняются?
::
. В любом случае, одинаково называть глобальные и локальные переменные — плохая практика. - person phuclv   schedule 22.05.2014