Область видимости переменных
Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали про преобразование типов в Javascript. В данной статье я бы хотел поговорить про важную тему для любого языка программирования — это область видимости переменных. В языке Javascript существует понятие глобального объекта, который определяет понятие глобального контекста исполнения кода. При работе с HTML-страницами, браузер создаёт глобальный объект. Если мы в скрипте не создаём функции, то мы имеем дело с контекстом глобального объекта. Давайте на примере покажу, что это значит:
var a = 5; alert(a);
Здесь мы создали переменную a и проинициализировали её значением 5. Затем с помощью метода alert(a) выводим её. В данном случае переменная a была создана в контексте глобального контекста, и метод alert(a) также выполняется в этом контексте. В Javascript есть ключевое слово this, которое указывает на текущий объект, т.е. это тот объект, в рамках которого вызывается переменная или функция. В нашем случае мы можем написать следующим образом:
var a = 5; this.alert(this.a);
В данном случае ключевое слово this указывает на глобальный объект.
С понятием функций и глобального объекта связаны понятия контекста выполнения и области видимости переменных. С глобальными переменными мы разобрались. Локальные переменные — это те переменные, которые создаются внутри тела функции с помощью оператора var. Такие переменные видны только внутри тела функции. Другими словами нельзя обратиться к этой переменной вне тела функции, в котором эта переменная была определена. Для названия локальных переменных можно использовать имена, которые были использованы для глобальных переменных или внутри других функций. Имя локальной переменной должно быть уникально только в контексте своей функции.
Переменная, которая был объявлена без оператора var, автоматически будет считаться глобальной. Присвоив такой переменной некоторое значение, мы присвоим это значение глобальной переменной. Если глобальной переменной с таким именем не было, она будет создана и ее значение будет равно новому значению. Следует избегать определение локальных переменных без оператора var, так как это может привести к различным ошибкам, разобраться в которых порой бывает трудно.
Если внутри функции мы обращаемся к переменной с некоторым именем, эта переменная сначала ищется среди локальных переменных. Если такая переменная среди локальных переменных этой функции (ее контексте) не найдена, следует переход в контекст внешней функции и поиск среди переменных этого контекста. Эта операция происходит, пока программа не доходит до глобального объекта. Вот в этом и заключается особенность области видимости переменных в Javascript от других языков программирования, к примеру от C#.
Пример:
var a = 10; //a – глобальная переменная function second_function(b) //b – локальная переменная (аргумент) { var d = 3; //d – локальная переменная function first_function() { var c = 8; //c – локальная переменная alert(c); //найдена среди локальных переменных функции first_function alert(d); //найдена среди локальных переменных функции second_function alert(a); //найдена среди глобальных переменных } first_function(); } second_function();
В данной статье вы узнали про область видимости переменных на примере Javascript.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.