2015-07-30 3 views
0

Вот код:JavaScript прицелы на локальной и глобальной переменной

var foo = 1; 
function bar() { 
    alert(foo) 
    if (!foo) { 
     var foo = 10; 
    } 
    alert(foo); 
} 
bar(); 

Хотя Foo является глобальной переменной. После вызова функции b() foo предупреждает о неопределенности. Поскольку это глобальная переменная, она должна предупреждать как 1 Правильно? Если я ошибаюсь, исправьте меня.

JSfiddle

ответ

3

У вас есть две переменные, называемые foo.

Одно объявлено в строке 1, которое является глобальным, а другое объявлено в строке 5, которое является локальным для функции bar.

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

Когда вы сообщаете значение для foo в строках 3 и 7, вы предупреждаете о местных foo.

+0

Спасибо за ответ .. Прежде чем объявить второй переменная в строке 5 .... я предупреждаю глобальную переменную ... тогда она показывает undefined – answer99

+0

@ answer99 - Нет, это не так. Прочтите мой ответ еще раз. Обратите особое внимание на последние два абзаца. – Quentin

+0

ОК спасибо Q ... я понял .. – answer99

1

Нет ... поскольку вы объявляете foo внутри функции bar как локальная переменная, глобальный экземпляр не будет доступен при использовании foo внутри функции.

Вы получаете undefined из-за переменный подъем, где все объявления переменных будут перемещены в начало функции так при выполнении ваша функция будет выглядеть

var foo = 1; 
function bar() { 
    var foo; 
    alert(foo) 
    if (!foo) { 
     foo = 10; 
    } 
    alert(foo); 
} 
bar(); 
Смежные вопросы