область видимости глобальной переменной javascript - PullRequest
4 голосов
/ 24 января 2012

Итак, я слышал, что переменная в js, инициализированная без «var», будет глобальной. так:

$(document).ready(function(){
      function foo(){
         //since i'm not using "var", will this function become global?
      }

      var bar = function(){
         //is this the better way to declare the function?
      }
})

Если он глобальный, почему я не могу получить к нему доступ в консоли. Если это не глобально, и его область действия находится в функции, будет ли пропуск "var" стоить некоторых выступлений? Спасибо.

1 Ответ

13 голосов
/ 24 января 2012

Только переменные, объявленные без var, становятся глобальными, это не относится к функциям.

Однако вы можете объявить foo следующим образом:

foo = function() {}

и оно должно быть глобальным.

Пропуск var, как правило, не рекомендуется по этим причинам (вне головы):

  • Разрешение переменной начинается с самого локального и направлено на поиск в глобальном пространстве имен, делая это медленнее.Гораздо медленнее в некоторых браузерах.
  • Вы склонны в конечном итоге конфликтовать с именами, загрязняя глобальное пространство имен.Например, одним из худших нарушителей будет for(i = 0; i < arr.length; i++) (обратите внимание на отсутствие var)

Возможно, вы захотите объявить функции с использованием var из-за языковой функции, называемой поднимая

Кстати, если вы решите объявлять функции с var, я рекомендую вам сделать это следующим образом:

var foo = function foo() {}

, потому что это дает "имя" функциивместо того, чтобы рассматриваться как анонимная функция, которая поможет с отладкой.Большинство людей не делают этого и заявляют, что используют function, я полагаю.

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