Я хочу иметь возможность упаковать код JavaScript в "пространство имен", чтобы предотвратить конфликты имен с другими библиотеками. Поскольку объявление пространства имен должно быть простым фрагментом кода, я не хочу зависеть от каких-либо внешних библиотек, чтобы предоставить мне эту функцию. Я нашел несколько советов о том, как это сделать просто, но ни один из них не может быть свободен от ошибок при прохождении через JSLint (используя ' Параметры "Хорошие детали" ).
В качестве примера я попробовал это из Advanced JavaScript (раздел Пространства имен без YUI):
"use strict";
if (typeof(MyNamespace) === 'undefined') {
MyNamespace = {};
}
Выполнение этого с помощью JSLint дает следующие ошибки:
Problem at line 2 character 12: 'MyNamespace' is not defined.
Problem at line 3 character 5: 'MyNamespace' is not defined.
Implied global: MyNamespace 2,3
Ошибка "Подразумеваемая глобальная" может быть исправлена путем явного объявления MyNamespace
...
"use strict";
if (typeof(MyNamespace) === 'undefined') {
var MyNamespace = {};
}
... и две другие ошибки могут быть исправлены путем объявления переменной вне блока if.
"use strict";
var MyNamespace;
if (typeof(MyNamespace) === 'undefined') {
MyNamespace = {};
}
Итак, это работает, но мне кажется, что (поскольку MyNamespace
всегда будет undefined в той точке, где он проверен?), это эквивалентно намного проще:
"use strict";
var MyNamespace = {};
JSLint согласен с этим, но я обеспокоен тем, что я упростил код до такой степени, что он больше не будет правильно функционируют как пространство имен. Является ли эта окончательная формулировка разумной?