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