JSLint将'window'作为全局变量的问题

时间:2009-09-10 08:31:41

标签: javascript jslint

所以我正在使用JSLint来尝试检测错误。我关闭了一些我不喜欢的选项,但我认为没有任何方法可以使用window全局变量。好吧,有Yahoo Widget选项,但这太过分了。

使用'window'有什么用处,为什么JSLint会说这会导致错误?

5 个答案:

答案 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

  

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

我不确定这个改变何时发生,但它让我陷入了一段时间。

答案 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,
}