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

Область видимости (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 нет области видимости на уровне блоков. Все переменные, объявленные внутри функции, независимо от того, где именно это сделано, определены во всей функции.

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

var x; // Объявляем неинициализированную переменную. Значением ее является undefined

alert(u); // Использование необъявленной переменной приведет к ошибке.

u = 3; // Присваивание значения необъявленной переменной создает эту переменную.

 








Дата добавления: 2016-01-09; просмотров: 664;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.