JavaScript: создание локальной области видимости глобальной переменной отменяет определение ее до того, как она установлена - PullRequest
0 голосов
/ 09 апреля 2011

Я не понимаю, это поведение:

var a = 1;
console.log('a is undefined1:', a == undefined);
var a;

//iterate selected jQuery elements:
jQuery.each(this, function(index, htmlElement) {
    console.log('a is undefined2:', a == undefined);
    var a;

Returns :
a не определено1: ложь
a не определено2: true

Если последняя строка (var a;) закомментирована, возвращается :
a не определено1: ложь
a не определено2: false

Я бы всегда ожидал последнего выхода. Что я не знаю?

Большое спасибо!

Ответы [ 2 ]

6 голосов
/ 09 апреля 2011

Помещение var a внутри функции создает другую переменную a, которая ограничена этой функцией.

Поскольку вы не присваиваете ему значение, оно не определено.

Когда вы комментируете это, вы тестируете внешний a, который имеет значение 1.

Переменные подняты. Неважно, где в функции, которую вы используете var foo, foo для этой функции по-прежнему применяется ко всей функции.

1 голос
/ 09 апреля 2011

Объявление переменной внутри функции с помощью var делает локальное копирование (новую переменную) с областью действия для всей функции - не имеет значения, используется ли она до ее объявления.

Никогда не объявляйте переменные без var.

Если вы хотите получить доступ к переменной golobal и у вас есть локальная переменная с тем же именем, вы можете получить доступ к глобальной переменной foo, используя window.foo

...