JSLint 关于“ window”作为全局变量的问题

所以我使用 JSLint来尝试检测错误。我关闭了一些我不喜欢的选项,但是我没有看到任何方法能够使用 window全局变量。好吧,有雅虎部件选项,但这是过度杀伤力。

使用“窗口”有什么问题吗? 为什么 JSLint 会说它会导致错误呢?

39501 次浏览

就像这样在你的剧本里写一条评论:

/*global window */


... your script goes here

此注释将告诉 JSLint window是在其他地方定义的。

看: http://www.JSLint.com/lint.html,

JSLint 还可以识别一个 /* global */注释,该注释可以向 JSLint 指示在该文件中使用的变量是在其他文件中定义的。注释可以包含逗号分隔的名称列表。每个名称后面可以选择跟一个冒号和 true 或 false,true 表示该文件可以赋值该变量,false 表示不允许赋值,这是默认值。

如果希望窗口在默认情况下是全局的,而不需要将注释应用到脚本中,那么可以将 predef:["window"]添加到本地 jslint.js文件的 JSLINT函数中的对象文本参数中。

顺便说一下,我正在使用 predef:["$","window"]使 jQuery 具有全局性。

更新:

这个答案在2009年是正确的 解决方案 /*jslint browser: true*/提供的马特克拉克森。

/*jslint browser: true*/

是正确的解决方案。从2017-07-07开始,你必须手动设置全局指令。来自 JSLint 文档:

Global */指令用于指定可用于此文件的一组全局变量(通常是函数和包含函数的对象)。在 ES6模块出现之前,浏览器通常使用这种方法将源文件链接在一起。强烈建议不要使用全局变量,但不幸的是,浏览器需要使用全局变量。只有在选择了“假设浏览器”选项时,才能使用/* global */指令。

因此,你需要使用:

/*jslint browser */
/*global window */

我不得不在这段代码中使用上述两个答案来消除所有警告:

/*jslint browser:true*/
/*global window*/
// eventBoiler v0.1.1 by @ryanpcmcquen
// https://github.com/ryanpcmcquen/eventBoiler
(function (win, doc) {
'use strict';
win.eventBoiler = function (selector, typeOfEvent, func) {
doc.querySelector(selector).addEventListener(typeOfEvent, func);
};
win.eventBoiler.all = function (selectors, typeOfEvent, func) {
Array.prototype.slice.call(doc.querySelectorAll(selectors)).map(function (i) {
i.addEventListener(typeOfEvent, func);
});
};
}(window, document));

所以对我来说,这就是使用 JSLint 网站的解决方案:

/*jslint browser:true*/
/*global window*/

要让 JSLint 知道您将 window识别为全局对象,请在文件顶部添加以下指令:

/*global window*/

我曾经可以用:

/*jslint browser: true */

但这似乎不再有效。现在,根据 JSHint 帮忙关于 browser的选择:

它不提供 selfwindow; 您必须自己请求这些可怕的全局对象的别名。

我不知道这个改变是什么时候做出的,但是它让我有一段时间陷入了困境。

如果你不想在每个文件中都指定它,你可以在你的 埃斯林特配置文件中全局设置它,如下所示:

"globals": {
"window": true,
}