страница 127
В отличие от глобальных переменных, локальные переменные определяются внутри функций. С тем, как в функциях описываются параметры, вам уже приходилось сталкиваться (в этом случае ключевое слово var при инициализации не использовалось). Что касается остальных переменных, то их можно определить с помощью ключевого слова var (для локальных переменных его использовать обязательно всегда). Диапазон легитимности локальных переменных не выходит за рамки операторов в теле описания функции. Ни одна другая функция или оператор за пределами текущей не в силах получить доступ к локальной переменной.
"Локальная область действия" определяется в тех случаях, когда для разных локальных переменных в рамках одного документа используются одинаковые имена. В большинстве случаев подобная практика весьма ущербна, поскольку приводит к очень неприятным ошибкам, которые крайне тяжело отслеживать. В то же время, в некоторых случаях удобно использовать одни и те же имена, скажем, для счетчиков в программном цикле for. Это вполне безопасно, поскольку такие счетчики в начале запуска цикла каждый раз заново инициализируются с начальным значением. Тем не менее, вставить один цикл for в другой такой же цикл, не использовав при этом отличную переменную для счетчика, вам не удастся.
Для того чтобы продемонстрировать структуру и поведение локальных и глобальных переменных, а также показать, почему крайне нежелательно использовать в документе для разных переменных одинаковые имена, приведен листинг 7.2. В нем описаны две локальные и две глобальные переменные. При этом имена локальной переменной совпадают с именами глобальной переменной.
<html> <head> <script type="text/JavaScript"> var aBoy = "Charlie Brown"; // глобальная переменная var hisDog = "Snoopy"; // глобальная переменная function demo(){ // Это пример того, как поступать не следует var hisDog = "Gromit" // локальная версия переменной hisDog var output = hisDog + "does not belong to " aBoy + ".<br>"; document.write(output); } </script> </head> <body> <script type="text/JavaScript"> demo(); // запускается при загрузке документа document.write(hisDog + "belongs to " + aBoy + "."); </script> </body> </html>
Листинг 7.2. Демонстрация использования локальных и глобальных переменных