Шаг 12.
Основы JavaScript.
Область видимости переменных

    На этом шаге мы рассмотрим вопросы, связанные с областью видимости переменных.

    Рассмотрим вопросы, связанные с определением области видимости переменных. Напомним, что переменные создаются либо при выполнении оператора присваивания, либо с помощью служебного слова var. Здесь возможны следующие ситуации.

    1. Переменная первый раз встречается слева от оператора присваивания в теле функции. В этом случае ее можно использовать как в пределах этой функции, так и вне ее. Таким образом, эта переменная является глобальной.

    Рассмотрим следующий скрипт:

. . . .
<!--
function f(a,b)
{
  S = a + b;
  return S;
}
z = f(2,3);
alert ("z = "+z+", S = "+S);
//-->
. . . .

    При его выполнении будет выведено диалоговое окно с сообщением:

    z = 5, S = 5

что свидетельствует о существовании переменной S вне тела функции.

    2. Если переменная определена во внешней программе, то ее можно использовать внутри функции. При этом она продолжает существовать после завершения выполнения этой функции, то есть является глобальной.

    Изменим последний скрипт:

. . . .
<!--
function f(a,b)
{
  S = a + b;
  return S;
}
S = 2;
z = f(2,3);
alert ("z = "+z+", S = "+S);
//-->
. . . .

    В этом случае строка S = 2; "создает" глобальную переменную S, значение которой изменяется в функции. Таким образом, результат выполнения данного скрипта будет аналогичен предыдущему.

    3. Если в теле функции для определения переменной используется служебное слово var, то такая переменная существует только в теле функции, то есть является локальной.

    Изменим первый скрипт, добавив var перед переменной S:

    var S = a + b;

    Такой скрипт выполняться не будет, так как переменная S не определена вне функции f(), то есть при выполнении конструкции

    alert ("z = "+z+", S = "+S);
возникнет ошибка.

    Изменим аналогично второй скрипт. Что получим при его выполнении? На экране в диалоговом окне будет располагаться следующая строка:

    z = 5, S = 2

    Дело в том, что переменная S, определенная в функции, является локальной, и "время жизни" ее ограничено рамками функции. Поэтому значение глобальной переменной S не изменится и останется равной 2.

    На следующем шаге мы рассмотрим встроенные функции JavaScript.




Предыдущий шаг Содержание Следующий шаг