【发布时间】:2023-10-04 19:09:01
【问题描述】:
我希望能够将我的 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 在检查时总是未定义?)它相当于更简单:
"use strict";
var MyNamespace = {};
JSLint 对此感到满意,但我担心我已经将代码简化到无法再作为命名空间正常工作的程度。这个最终的表述是否合理?
【问题讨论】:
-
您特别担心
MyNamespace不能作为命名空间正常工作? -
只是一种琐碎的感觉,因为那里的建议建议更复杂的配方,我错过了一些对我来说并不明显的细微差别。
标签: javascript namespaces jslint