所以我使用 JSLint来尝试检测错误。我关闭了一些我不喜欢的选项,但是我没有看到任何方法能够使用 window全局变量。好吧,有雅虎部件选项,但这是过度杀伤力。
window
使用“窗口”有什么问题吗? 为什么 JSLint 会说它会导致错误呢?
就像这样在你的剧本里写一条评论:
/*global window */ ... your script goes here
此注释将告诉 JSLint window是在其他地方定义的。
看: http://www.JSLint.com/lint.html,
JSLint 还可以识别一个 /* global */注释,该注释可以向 JSLint 指示在该文件中使用的变量是在其他文件中定义的。注释可以包含逗号分隔的名称列表。每个名称后面可以选择跟一个冒号和 true 或 false,true 表示该文件可以赋值该变量,false 表示不允许赋值,这是默认值。
/* global */
如果希望窗口在默认情况下是全局的,而不需要将注释应用到脚本中,那么可以将 predef:["window"]添加到本地 jslint.js文件的 JSLINT函数中的对象文本参数中。
predef:["window"]
jslint.js
JSLINT
顺便说一下,我正在使用 predef:["$","window"]使 jQuery 具有全局性。
predef:["$","window"]
更新:
这个答案在2009年是正确的 解决方案 /*jslint browser: true*/提供的马特克拉克森。
/*jslint browser: true*/
是正确的解决方案。从2017-07-07开始,你必须手动设置全局指令。来自 JSLint 文档:
Global */指令用于指定可用于此文件的一组全局变量(通常是函数和包含函数的对象)。在 ES6模块出现之前,浏览器通常使用这种方法将源文件链接在一起。强烈建议不要使用全局变量,但不幸的是,浏览器需要使用全局变量。只有在选择了“假设浏览器”选项时,才能使用/* global */指令。
因此,你需要使用:
/*jslint browser */ /*global 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*/
要让 JSLint 知道您将 window识别为全局对象,请在文件顶部添加以下指令:
/*global window*/
我曾经可以用:
/*jslint browser: true */
但这似乎不再有效。现在,根据 JSHint 帮忙关于 browser的选择:
browser
它不提供 self或 window; 您必须自己请求这些可怕的全局对象的别名。
self
我不知道这个改变是什么时候做出的,但是它让我有一段时间陷入了困境。
如果你不想在每个文件中都指定它,你可以在你的 埃斯林特配置文件中全局设置它,如下所示:
"globals": { "window": true, }