тайна доступа к переменной javascript - PullRequest
2 голосов
/ 19 сентября 2010
var foo = 'hello';

var myfunc = function() {
  console.log(foo);
  var foo = foo || 'world';
  console.log(foo);
}

myfunc();

почему первый foo зарегистрирован как 'undefined'?

1 Ответ

9 голосов
/ 19 сентября 2010

Потому что в какой строке вы на самом деле объявляете переменную, используя «var», не имеет значения, пока она остается в той же функции.Если функция имеет где-либо объявленное var x, то любая ссылка на это имя считается локальной в той области, где она объявлена.

Конечно, обычно вы не ссылаетесь на переменную до того, как она объявлена, но рассмотрим этот фрагмент:

function foo(a) {
   if (a) {
     var b = "something";
   }
   console.log(b);
}

Переменная b является локальной для этой функции, поэтому, независимо от значения a, использование b не будет случайно ссылаться на переменную, объявленную ввключающая область видимости.

Примечание: javascript имеет только область видимости на уровне функций, он не имеет области видимости на уровне блока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...