• Страница 1 из 1
  • 1
Форум » I. JavaScript » Функции » Область видимости функций (Предупреждение конфликта переменных)
Область видимости функций
1 Рассмотрим в качестве примера вариант кода, в котором внутри функции и вне её есть переменная с одинаковым названием:

Код
var message = 'Добро пожаловать!';
function warning(message) {
alert(message);
}
warning('Привет,мир!');
alert(message);


в данном примере у нас есть две переменных с одинаковым именем message, первая переменная в начале сценария содержит в качестве значения строку 'Добро пожаловать!', а вторая является параметром функции warning.

Что означает данная строка?

Код
warning('Привет,мир!');


верно, она означает, что мы вызываем функцию warning, передавая ей в качестве аргумента строку 'Привет,мир!'.
Что при этом произойдёт? Откроется всплывающее окно с текстом 'Привет,мир!'

А что означает данная строка?

Код
alert(message);


Она означает, что нужно вывести в всплывающем окне содержимое переменной message, а именно, фразу 'Добро пожаловать!'

Почему именно так? Потому что: параметр функции виден только внутри неё, поэтому доступ к переменной message, являющейся параметром функции, возможен только внутри функции.
Каждая функция имеет свою область видимости, поэтому переменные внутри функции "не видны" вне функции.

Изменить / Удалить

2 Теперь рассмотрим пример, когда переменные созданы внутри функции, но не являются её параметрами:

Код
var message = 'Добро пожаловать!';
function warning() {
  var message = 'Привет,мир!';
  alert(message);
}
warning();
alert(message);


В данном случае переменная message создаётся дважды: в начале сценария и внутри функции, каждая из них имеет разное значение.
Так что же произойдёт при вызове функции?

Код
warning();


верно, код в фигурных скобках выполнится и во всплывающем окне мы увидим текст:

Цитата
Привет,мир!


Почему так? потому что команда внутри функции

Код
alert(message);


относится именно к переменной message, созданной внутри функции, а не вне её.

А что будет если вне функции запустить такую команду?

Код
alert(message);


тогда, во всплывающем окне мы увидим текст

Цитата
Добро пожаловать!


так как эта команда будет относиться уже к переменной message, созданной вне функции, в начале сценария, поскольку к переменной message внутри функции доступа у неё нет.

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

Переменные же, созданные в основном сценарии(за пределами функции), называются глобальными, и к ним имеют доступ все функции сценария.

Пример:

Код
var message = 'Это глобальная переменная';
function warning() {
  alert(message);
}
warning(); /* в окне будет текст 'Это глобальная переменная' */


Так как у самой функции нет параметра(переменной) message и внутри функции такая переменная не создана, то функция ищет переменную с таким названием вне её, и поэтому во всплывающем окне мы увидим значение переменной message,находящейся вне функции, текст 'Это глобальная переменная'

Отсюда вывод: переменная внутри функции существует, только если она является её параметром, либо создана внутри функции с помощью ключевого слова var.

Изменить / Удалить

3 Давайте разберём вот такой интересный пример:

Код
var message = 'За пределами функции';
function warning() {
  message = 'Внутри функции';
  alert(message); /* 'Внутри функции' */
}
warning();
alert(message); /* 'Внутри функции' */


Итак, первоначально мы создали переменную(глобальную) message и присвоили ей в качестве значения строку 'За пределами функции'
Далее идёт код функции warning, внутри которой мы видим такую строку кода:

Код
message = 'Внутри функции';


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

Следовательно, значение глобальной переменной message теперь строка с текстом 'Внутри функции'.
Вызовем функцию warning:

Код
warning();


в открывшемся окне мы увидим текст:

Цитата
Внутри функции


Последняя строка в нашем коде:

Код
alert(message);


вызывает всплывающее окно, внутри которого выводится значение переменной message, а так как её значение было переопределено, то в окне мы увидим не тот текст, который был в ней изначально('За пределами функции'), а этот:

Цитата
Внутри функции


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

Изменить / Удалить

Форум » I. JavaScript » Функции » Область видимости функций (Предупреждение конфликта переменных)
  • Страница 1 из 1
  • 1
Поиск: