Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Области видимости переменных
Прежде чем использовать переменную, ее необходимо предварительно объявить. До объявления переменная не видна в программе. Объявить переменную можно глобально (вне функций) или локально (внутри функций или блока).
- Глобальные переменные — это переменные, объявленные в программе вне функций. Глобальные переменные видны в любой части файла, в котором они объявлены, включая функции.
- Локальные переменные — это переменные, которые объявлены внутри функций. Локальные переменные видны только внутри функции или вложенного блока. Инициализация таких переменных производится при каждом вызове функции. После выхода из функции локальная переменная уничтожается.
- Локальные переменные внутри блока — это переменные (или константы), которые объявлены внутри неименованного блока (в области, ограниченной фигурными скобками) с помощью ключевого слова
let
(илиconst
). Такие переменные видны только внутри блока и во вложенных блоках. Инициализация таких переменных производится при каждом входе в блок. После выхода из блока переменная уничтожается.
Если имя локальной переменной совпадает с именем глобальной переменной, то все операции внутри функции осуществляются с локальной переменной, а значение глобальной не изменяется.
Область видимости глобальных и локальных переменных приведена в листинге 3.2.
Листинг 3.2. Область видимости переменных
function func() {
var n = 10; // Локальная переменная
let x = 60; // Локальная переменная
const LY = 7; // Локальная константа
// Доступ к глобальным переменным и константам
console.log(g1); // 5
console.log(GX); // 8
// Можно изменить значение глобальной переменной
g1 = 33;
// Доступ к локальным переменным и константам
console.log(n); // 10
console.log(x); // 60, а не 3
console.log(LY); // 7
// Изменяется локальная переменная
x = 88;
}
var g1 = 5; // Глобальная переменная
let x = 3; // Глобальная переменная
const GX = 8; // Глобальная константа
// Вызываем функцию
func();
console.log(g1); // 33 (значение изменилось)
console.log(x); // 3 (значение не изменилось)
console.log(GX); // 8
Очень важно учитывать, что переменная, объявленная внутри блока с помощью ключевого слова let
, видна только в пределах блока (внутри фигурных скобок). Например, присвоим значение переменной в зависимости от некоторого условия:
// Неправильно!!!
let x = 10;
if (x == 10) { // Какое-то условие
let y;
y = 5;
console.log(y);
}
else {
let y;
y = 25;
console.log(y);
}
// console.log(y); // Ошибка! Переменная y здесь не видна!
// ReferenceError: y is not defined
В этом примере переменная y
видна только внутри блока. После условного оператора if
переменной не существует. Чтобы переменная была видна внутри блока и после выхода из него, необходимо поместить объявление переменной перед блоком:
// Правильно
let x = 10;
let y = 0;
if (x == 10) { // Какое-то условие
y = 5;
console.log(y);
}
else {
y = 25;
console.log(y);
}
console.log(y);
Язык JavaScript поддерживает также неименованные блоки. Такие блоки не привязаны ни к какой инструкции. Просто фигурные скобки сами по себе. Если переменная объявлена внутри такого блока с помощью ключевого слова let
, то после блока она уже не будет видна. Точно такая же ситуация при объявлении констант:
{ // Блок
var x = 3;
let y = 25;
const Z = 10;
}
console.log(x); // 3. OK
// console.log(y); // Ошибка! Переменная y здесь не видна!
// ReferenceError: y is not defined
// console.log(Z); // Ошибка! Константа Z здесь не видна!
// ReferenceError: Z is not defined
Заметьте, что к переменной, объявленной с помощью ключевого слова var
, это правило не применяется.
Неименованные блоки могут быть вложенными. Если во вложенном блоке объявлена одноименная переменная с помощью ключевого слова let
, то создается новая переменная. Если используется ключевое слово var
, то значение будет перезаписано:
var x = 1;
let y = 2;
{ // Блок
var x = 3;
let y = 25;
console.log(x); // 3
console.log(y); // 25
{ // Блок
var x = 16;
let y = 77;
console.log(x); // 16
console.log(y); // 77
}
}
console.log(x); // 16 (Значение изменилось!)
console.log(y); // 2 (Значение не изменилось)
В цикле for
переменная, объявленная внутри круглых скобок с помощью ключевого слова let
, видна только внутри блока:
for (let i = 0; i < 10; i++) {
console.log(i);
}
// console.log(i); // Ошибка! Переменная i здесь не видна!
// ReferenceError: i is not defined
Если переменную объявить с помощью ключевого слова var
, то она будет видна после выхода из блока:
for (var i = 0; i < 10; i++) {
console.log(i);
}
console.log(i); // 10. OK
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов