JSLint的问题与“窗口”作为一个全局variables

所以我使用JSLint来尝试和检测错误。 我closures了一些我不喜欢的选项,但是我没有看到任何能够使用window全局variables的方法。 那么,有雅虎小工具选项,但这是矫枉过正。

使用“窗口”的处理是什么,为什么JSLint会说错误?

 /*jslint browser: true*/ 

这是正确的解决scheme。

2017-07-07:JSLint文档现在说:

browser …它不提供自己或窗口; 你将不得不自己请求这些可怕的全局对象的别名。

/ global /指令只能在假定浏览器选项被选中时使用。

所以你现在需要使用:

 /* jslint browser */ /* global window */ 

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

 /*global window */ ... your script goes here 

这个评论会告诉JSLint window是在别的地方定义的。

请参阅: http : //www.JSLint.com/lint.html ,

JSLint还会识别一个/* global */ comment,它可以向JSLint指出在该文件中使用的variables是在其他文件中定义的。 注释可以包含逗号分隔的名称列表。 每个名称可以有select地跟一个冒号,也可以是true或false,true表示variables可以被这个文件赋值,false表示不允许赋值,这是默认值。

如果希望窗口默认为全局而不必将注释应用于脚本,则可以将predef:["window"]到本地jslint.js文件的JSLINT函数内的对象字面量参数。

顺便说一句,我使用的是predef:["$","window"]也有jQuery全局。

更新:

这个答案在2009年是正确的。到目前为止,你应该使用解决scheme/*jslint browser: true*/由马特·克拉克森提供。

要让JSLint知道你认识到window是一个全局对象,在你的文件的顶部添加这个指令:

 /*global window*/ 

我曾经可以使用:

 /*jslint browser: true */ 

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

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

我不知道什么时候做了这个改变,但是让我有一阵子阻碍了。

我不得不在这个代码中使用上面的两个答案来摆脱所有的警告:

 /*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网站时的解决scheme:

 /*jslint browser:true*/ /*global window*/ 

如果你不想在每个文件中指定这个,你可以在你的eslintrcconfiguration文件中全局地设置它,像这样:

 "globals": { "window": true, }