我希望能够将我的 JavaScript 代码打包到“命名空间”中,以防止与其他库发生名称冲突。由于命名空间的声明应该是一段简单的代码,我不想依赖任何外部库来为我提供此功能。我已经找到了关于如何简单地做到这一点的各种建议,但在通过JSLint运行时似乎没有一个没有错误(使用“The Good Parts”选项)。
例如,我从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
在检查时总是未定义?)它相当于更简单的:
"use strict";
var MyNamespace = {};
JSLint 对此很满意,但我担心我已经将代码简化到无法再作为命名空间正常工作的程度。这个最终的表述是否合理?