Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по Java Script 1.doc
Скачиваний:
131
Добавлен:
12.02.2015
Размер:
1.44 Mб
Скачать

Область видимости переменной

Область видимости (scope) переменной – это та часть программы, для которой эта переменная определена. Глобальная переменная имеет глобальную область видимости – она определена для всей JavaScript-программы. Переменные, объявленные внутри функции, определены только в ее теле. Они называются локальными и имеют локальную область видимости. Параметры функций также считаются локальными переменными, определенными только в теле этой функции.

Внутри тела функции локальная переменная имеет преимущество перед глобальной переменной с тем же именем. Если объявить локальную переменную или параметр функции с тем же именем, что у глобальной переменной, то фактически глобальная переменная будет скрыта.

Так, следующий код печатает слово «локальная»:

var scope = "глобальная"; // Объявление глобальной переменной

function checkscope() {

var scope = "локальная"; // Объявление локальной переменной с тем же именем

document.write(scope); // Используется локальная переменная, а не глобальная

}

checkscope(); // Вызов функции checkscope. Печатается слово "локальная"

Объявляя переменные с глобальной областью видимости, инструкцию var можно опустить, но при объявлении локальных переменных она необходима. Посмотрите, что получается, если этого не сделать:

scope = "глобальная"; // Объявление глобальной переменной, без var

function checkscope() {

scope = "локальная"; // Изменили глобальную переменную

document.write(scope); // Используется глобальная переменная

myscope = "локальная"; // Здесь мы неявно объявляем новую глобальную переменную

document.write(myscope); // Используется новая глобальная переменная

}

checkscope(); // Печатает "локальнаялокальная"

document.write(scope); // Печатает "локальная"

document.write(myscope); // Печатает "локальная"

Функции, как правило, не знают, какие переменные объявлены в глобальной области видимости или для чего они нужны. Поэтому функция, использующая глобальную переменную вместо локальной, рискует изменить значение, необходимое какой-либо другой части программы. К счастью, избежать этой неприятности легко: объявляйте все переменные с помощью инструкции var.

Определения функций могут быть вложенными. Каждая функция имеет собственную локальную область видимости, поэтому может быть несколько вложенных уровней локальных областей видимости. Например:

var scope = "глобальная область видимости"; // Глобальная переменная

function checkscope() {

var scope = "локальная область видимости"; // Локальная переменная

function nested() {

var scope = "вложенная область видимости"; // Вложенная область видимости

// локальных переменных

document.write(scope); // Печатает "вложенная область видимости"

}

nested();

}

checkscope();

Обратите внимание: в отличие от C, C++ и Java, в JavaScript нет области видимости на уровне блоков. Все переменные, объявленные внутри функции, независимо от того, где именно это сделано, определены во всей функции.

В следующем фрагменте иллюстрируются некоторые различия между неопределенными и неинициализированными переменными: