Прежде чем изучать область видимости переменных в JavaScript, нам следует уточнить несколько моментов:
• Область видимости переменных JavaScript основана на уникальной цепочке областей действия.
•JavaScript не имеет области действия на уровне блоков.
• Переменные, объявленные в функции, определяются во всей функции.
1. Цепочка областей видимости JavaScript
Сначала посмотрите на следующий код:
Скопируйте код кода следующим образом:
<script type="text/javascript"> var Rain = 1; function Rainman() { var Man = 2; function Internal() { var InnerVar = 4; // Вызов внутренней функции; } Rainman() // Вызов функции Rainman</script>;
Соблюдайте код предупреждения (дождь);. JavaScript сначала проверяет, определена ли переменная дождя во внутренней функции. Если она определена, используется переменная дождя во внутренней функции. Если переменная дождя не определена во внутренней функции, JavaScript продолжит проверять, существует ли переменная дождя. определена в функции Rainman. В этом коде переменная дождя не определена в теле функции Rainman, поэтому движок JavaScript будет продолжать поиск (глобальный объект), чтобы увидеть, определен ли дождь в глобальном объекте; определенный дождь = 1, поэтому окончательный результат будет равен «1».
Цепочка областей: когда JavaScript необходимо запросить переменную x, он сначала будет искать первый объект в цепочке областей. Если первый объект не определяет, поиск продолжится и так далее.
Приведенный выше код включает три объекта цепочки областей действия по порядку: внутренний, человек дождя и окно.
2. Внутри тела функции локальные переменные имеют более высокий приоритет, чем глобальные переменные с тем же именем.
Скопируйте код кода следующим образом:
<script type="text/javascript"> var Rain = 1; //Определяем глобальную переменную Rain function check(){ var Rain = 100; //Определяем локальную переменную Rain alert( //100 появится); здесь } check (); alert( дождь //1 появится здесь</script>
3. JavaScript не имеет области действия на уровне блоков.
Это также та часть, где JavaScript более гибок, чем другие языки.
Внимательно просмотрите приведенный ниже код: вы обнаружите, что области действия переменных i, j и k одинаковы, и они глобальны во всем теле функции дождя.
Скопируйте код кода следующим образом:
<script type="text/javascript"> function Rainman(){ // В теле функции Rainman есть три локальные переменные var i = 0; if ( 1 ) { var j = 0; k < 3; k++) { alert( k ); // Всплывающее окно 0 1 2 соответственно } alert( k ); // Всплывающее окно 3 } // Всплывающее окно 0 </script>
4. Переменные, объявленные в функции, определяются во всей функции.
Сначала обратите внимание на этот код:
Скопируйте код кода следующим образом:
<script type="text/javascript"> function Rain(){ var x = 1; function man(){ x = 100 } man(); //Вызов man alert( //100); } дождь() //Вызов дождя</script>;
Приведенный выше код показывает, что переменная x может использоваться во всем теле функции дождя и может быть переназначена. Благодаря этому правилу будут получены «невероятные» результаты, обратите внимание на код ниже.
Скопируйте код кода следующим образом:
<script type="text/javascript"> var x = 1; function Rain(){ alert( x ); //Всплывающее сообщение "не определено" вместо 1 var x = 'rain-man'; /pop 'человек дождя' } дождь();</script>
Это связано с тем, что локальная переменная x в функции Rain определена во всем теле функции (var x= 'rain-man', объявлена), поэтому глобальная переменная x с тем же именем скрыта во всем теле функции Rain. Причина, по которой здесь появляется «неопределенное», заключается в том, что при первом выполнении alert(x) локальная переменная x еще не инициализирована.
Таким образом, приведенная выше функция дождя эквивалентна следующей функции:
Скопируйте код кода следующим образом:
функция дождя () {вар х; оповещение (х); х = 'человек дождя';}
5. Переменные, определенные без использования ключевого слова var, являются глобальными переменными.
Скопируйте код кода следующим образом:
<script type="text/javascript"> function Rain(){ x = 100; //Глобальная переменная x объявлена и назначена} Rain(); //100 появится </script>
Это также распространенная ошибка среди новичков в JavaScript, из-за которой непреднамеренно оставляются многие глобальные переменные.
6. Глобальные переменные — это все свойства объекта окна.
Скопируйте код кода следующим образом:
<script type="text/javascript"> var x = 100; alert( window.x);//всплывающее окно 100 alert(x);</script>
Эквивалентно следующему коду
Скопируйте код кода следующим образом:
<script type="text/javascript"> window.x = 100; alert( window.x ); alert(x)</script>