страница 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. Демонстрация использования локальных и глобальных переменных


