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