Вопрос

Часто я вижу глобальный объект, определенный в коде JavaScript, чтобы действовать как пространство имен.

var MyNS = {a: function() {}, ... };

Но иногда я вижу, как люди уходят из ключевого слова "var", как

MyNS = {a: function() {}, ...};

Я верю в веб-браузеры, если вы не определяете переменную с var, она помещается в окно объекта, который действует как глобальное пространство имен. Так как он экономит несколько байтов текста, не используя «var», есть ли причина использовать ключевое слово Для этой конкретной цели ?

Это было полезно?

Решение

Так как он экономит несколько байтов текста, не используя «var», есть ли причина использовать ключевое слово для этой конкретной цели?

Я не рекомендую вам избежать var Ключевое слово, даже если вы находитесь в глобальном коде.

Два способа кажутся похожими, но на самом деле они не одинаковы, первый - это Переменная декларация, то Переменная объекта В Global Code является сам глобальный объект, поэтому глобальные переменные доступны в качестве свойств глобального объекта (window.MyNS).

Второй Недослуженное назначение, он создает свойство на глобальном объекте, если идентификатор не найден в цепочке области.

Реальная причина избежать того, что в новом стандарте языка, Ecmascript 5-е издание, под Строгий режим, присвоение к незабываемому идентификатору бросит ReferenceError ломаю свой код.

Существует также еще одна тонкая разница между вашими двумя примерами, экскурирование переменной создает свойство на глобальном объекте, который не удалена:

var myVar = '';
delete window.myVar; // false
typeof window.myVar; // 'string'

В то время как неразделенное назначение не:

myProp = '';
delete window.myProp; // true
typeof window.myProp; // 'undefined'

Рекомендуемая статья:

Другие советы

Использование var Определяет локальную переменную в текущем объеме. Если вы находитесь в глобальном масштабе, они эффективно эквивалентны. Использование var Подробнее для понимания и ремонтопригодности, так как намерение абсолютно ясна. Это менее ясно, не инициализация var.

В любом местном объеме, если MyNS Инициализируется где-то подразделение цепи охвата, вы перезаписываете эту локальную переменную, а не определяющую глобальную переменную.

Я думаю, что приятно использовать ключевое слово, потому что он получает вас в привычке, и помогает предотвратить неприятные ошибки, когда вы забыли его внутри функциональных органов. Также приятно в случае, если какой-то глобальный код найдет себя мигрироваться в функцию.

Но нет, это не строго необходимо.

редактировать - @eyeliDeless имеет действительно хороший момент, хотя если вы печатаете код на глобальном уровне, уже это не проблема.

Справедливой пуленепробиваемый узор, который я видел, - это инициализировать глобальные пространства имен с чем-то вроде этого:

(function(window, undefined) {

  var foo = { stuff: "in my namespace", ... };

  window.foo = foo;
})(this);

На глобальном уровне, this Будет окно объектом (если вы находитесь в браузере; если нет, то это все, что глобальный объект в этом контексте).

Дуглас Крукфорд по этому вопросу:http://www.yuiblog.com/blog/2008/04/16/global-domination-part-two/

Он посещается на использовании комментария с инициализацией, но без var. Отказ Его анализ компромиссов стоит читать, даже если вы не согласны.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top