所以我正在使用JSLint来尝试检测错误。我关闭了一些我不喜欢的选项,但我认为没有任何方法可以使用window
全局变量。好吧,有Yahoo Widget选项,但这太过分了。
使用'window'有什么用处,为什么JSLint会说这会导致错误?
答案 0 :(得分:135)
/*jslint browser: true*/
这是正确的解决方案。自2017-07-07起,您必须手动设置全局指令。来自JSLint documentation:
/ * global * /指令用于指定一组可用于此文件的全局变量(通常是包含函数的函数和对象)。这在浏览器中常用于在ES6模块出现之前将源文件链接在一起。强烈建议不要使用全局变量,但遗憾的是Web浏览器需要使用它们。只有在选择了“假设浏览器”选项时才能使用/ * global * /指令。
所以你需要使用:
/*jslint browser */
/*global window */
答案 1 :(得分:76)
只需在脚本中做出评论:
/*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
文件。
BTW,我正在使用predef:["$","window"]
来使jQuery全局化。
<强>更新强>
这个答案在2009年是正确的。截至目前你应该使用
解决方案/*jslint browser: true*/
由Matt Clarkson提供。
答案 2 :(得分:4)
要让JSLint知道您将window
识别为全局对象,请在文件顶部添加此指令:
/*global window*/
我曾经能够使用:
/*jslint browser: true */
但这似乎不再起作用。现在,根据关于browser
选项的JSHint help:
它不提供
self
或window
;你必须自己请求这些可怕的全局对象的别名。
我不确定这个改变何时发生,但它让我陷入了一段时间。
答案 3 :(得分:3)
我必须在此代码中使用上述两个答案来消除所有警告:
/*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*/
答案 4 :(得分:1)
如果您不想在每个文件中指定此内容,可以在 eslintrc 配置文件中全局设置,如下所示:
"globals": {
"window": true,
}