75

所以我使用JSLint来尝试检测错误。我关闭了一些我不喜欢的选项,但我看不到任何方法可以启用能够使用window全局变量。嗯,有 Yahoo Widget 选项,但那是矫枉过正。

使用“窗口”有什么意义,为什么 JSLint 会说这会导致错误?

4

5 回答 5

135
/*jslint browser: true*/

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

/*global*/ 指令用于指定该文件可用的一组全局变量(通常是函数和包含函数的对象)。在 ES6 模块出现之前,这通常在浏览器中用于将源文件链接在一起。强烈建议不要使用全局变量,但不幸的是 Web 浏览器需要使用它们。/*global*/ 指令只能在选择 Assume a browser 选项时使用。

所以你需要使用:

/*jslint browser */
/*global window */
于 2011-09-12T13:41:35.003 回答
76

只需像这样在您的脚本中发表评论:

/*global window */

... your script goes here

该注释将告诉 JSLintwindow是在其他地方定义的。

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

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

当您希望 window 默认为全局而不必将注释应用于脚本时,您可以在本地文件predef:["window"]的函数中添加对象文字参数。JSLINTjslint.js

顺便说一句,我也使用predef:["$","window"]jQuery global。

更新:

这个答案在 2009 年是正确的。到目前为止,您应该使用/*jslint browser: true*/Matt Clarkson 提供的解决方案。

于 2009-09-10T08:37:40.110 回答
4

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

/*global window*/

我曾经能够使用:

/*jslint browser: true */

但这似乎不再起作用。现在,根据有关该选项的JSHint 帮助:browser

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

我不确定什么时候做出的改变,但它让我受阻了一段时间。

于 2015-11-17T04:54:16.550 回答
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 网站时的解决方案:

/*jslint browser:true*/
/*global window*/
于 2015-10-29T15:27:22.783 回答
1

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

"globals": {
    "window": true,
}
于 2017-10-02T11:47:28.070 回答