JavaScript — достаточно гибкий язык, в котором многие конструкции, которые, будучи написанными на других языках, выдавали бы ошибку, отлично работают. К примеру — объявление переменных. Часто возникает вопрос «Зачем в JavaScript для переменных нужен var, если код и без него отлично работает во всех браузерах?». На самом деле ответ заключается в предназначении этого самого var. Ключевое слово var необходимо, чтобы объявить переменную в текущей области видимости, то есть чтобы ограничить видимость переменной.
В JavaScript предусмотрено две области видимости для переменной: глобальная и локальная. Область видимости — это фрагмент кода программы, в котором эта переменная доступна и гре её можно использовать.
Переменная, которая была объявлена за пределами какой-либо функции является глобальной переменной — она имеет глобальную область видимости и доступна в любом месте кода программы.
<script>
var a = 1;
function get() {
alert(a);
}
get();
</script>
Этот код выведет «1» — alert внутри функции, хотя переменная объявлена вне ее.
Переменная, объявленная внутри функции является локальной — она имеет локальную область видимости (область видимости функции) и доступна в любом месте внутри функции, в том числе и внутри вложенных функций. Локальная переменная создаётся и уничтожается каждый раз при вызове функции.
<script>
function get() {
var a = 10;
alert(a);
}
get();
alert(a);
</script>
Этот код покажет только один alert — первый, со значением 10. Второй не выполнится, поскольку переменная a в данной области видимости не существует.
Внутри тела функции локальная переменная имеет преимущество перед глобальной переменной с тем же именем, т.е. если объявить локальную переменную или параметр функции с тем же именем, что у глобальной переменной, то глобальная переменная будет скрыта и будет использоваться локальная:
<script>
var a = 1;
function get() {
var a = 10;
alert(a);
}
get();
alert(a);
</script>
Этот код сначала выведет «10» — alert внутри функции, a затем «1» — alert вне функции. То есть, значение глобальной переменной не изменилось.
Таким образом, без var область видимости новой переменной — глобальный объект window. А если переменная объявлена с var, ее область видимости — текущая функция. Если переменная объявлена вне функции, то ее область видимости — глобальная, то есть var можно опустить.
Важно, что в отличие от большинства языков, в JavaScript блок (код, взятый в фигурные скобки) не задает область видимости.
<script>
function get() {
var a = 10;
{
var a = 1;
alert(a);
}
alert(a);
}
get();
</script>
Этот код выведет оба раза значение «1».
Спасибо, очень полезная статья.