所以我正在使用JSLint来尝试检测错误。我关闭了一些我不喜欢的选项,但是我没有看到任何方法能够使用window
全局变量。好吧,有Yahoo Widget选项,但这太过分了。
使用'window'有什么用处,为什么JSLint会说这会导致错误?
/*jslint browser: true*/
对此是正确的解决方案。自2017-07-07起,您必须手动设置全局指令。来自JSLint documentation:
/ * global * /指令用于指定一组可用于此文件的全局变量(通常是包含函数的函数和对象)。这在浏览器中常用于在ES6模块出现之前将源文件链接在一起。强烈建议不要使用全局变量,但遗憾的是Web浏览器需要使用它们。只有在选择“假定浏览器”选项时才能使用/ * global * /指令。
所以你需要使用:
/*jslint browser */
/*global window */
只需在脚本中发表评论即可:
/*global window */
... your script goes here
此注释将告诉JSLint window
是在其他地方定义的。
见:http://www.JSLint.com/lint.html,
JSLint还识别一个
/* global */
注释,该注释可以向JSLint指示此文件中使用的变量是在其他文件中定义的。注释可以包含逗号分隔的名称列表。每个名称后面都可以跟冒号后跟true或false,true表示该变量可以由此文件赋值,false表示不允许赋值,这是默认值。
如果希望窗口默认为全局,而不必将注释应用于脚本,则可以将predef:["window"]
添加到本地JSLINT
文件的jslint.js
函数内的object literal参数中。
顺便说一句,我正在使用predef:["$","window"]
将jQuery全局化。
更新:
这个答案在2009年是正确的。截至目前,你应该使用Matt Clarkson提供的解决方案/*jslint browser: true*/
。
要让JSLint知道您将window
识别为全局对象,请在文件顶部添加此指令:
/*global window*/
我曾经能够使用:
/*jslint browser: true */
但这似乎不再奏效。现在,根据JSHint help关于browser
选项:
它不提供
self
或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 website时的解决方案:
/*jslint browser:true*/
/*global window*/
如果您不想在每个文件中指定它,您可以在eslintrc配置文件中全局设置它,如下所示:
"globals": {
"window": true,
}