从另一个文件导入全局变量的jslint

4

当使用 jslint 分析文件时,是否有一种方法可以使用在另一个 js 文件中声明的全局变量?

目前我必须在头部声明所有全局变量,但这非常缓慢且不实用。

/* global console, myglobalvar1, othervar... */ 

有没有像Re-sharper那样导入其他脚本文件的方法?
/// <reference path="my.js" /> 
1个回答

4

JSLint可能为您提供了一个有用的代码架构改进建议。为什么不将所有这些全局变量放在同一个命名空间中呢?

而不是...

var Global1 = "spam",
    Global2 = 2;

...使用...

var MyStuff = MyStuff || {};
MyStuff.Global1 = "spam";
MyStuff.Global2 = 2;

... 或者,更传统的做法是...

var MyStuff = {
    Global1: "spam",
    Global2: 2 
};

现在您可以简单地包含...

/*global MyStuff*/

每个[其他]文件上都有相同的内容,这样就可以省去重复劳动。如果您稍后向MyStuff添加更多内容,则已经涵盖了这些内容。如果您需要在将其视为全局变量的页面上添加一些东西到MyStuff中,那也很简单... MyStuff.NewField = "new";

您已经有很多东西从一个文件移动到另一个文件,这表明它们是一个功能单元(或几个功能单元),每个文件都需要知道。JSLint建议您将它们分组。


Ruffin提出的观点很有道理,我会通过将变量分组来减少每个文件中的变量数量。 - Deni Spasovski
这种架构难道不是削弱了JSLint检测缺失全局的能力吗?MyStuff.Global3不存在,但JSLint会认为没问题,因为它在MyStuff处停止检查。 - Robert
JavaScript是一种动态语言,因此您确实无法比检查“命名空间”的顶层更好。Global3可以添加在项目的任何文件中,而不管MyStuff定义在哪里,而JSLint仅在文件范围内进行lint。相信我,一旦您的代码变得足够复杂,有意识地使用命名空间来维护关注点分离是非常必要的,就像OP的global行所示!;^) - ruffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接