JSLint:在定义之前使用
Posted
技术标签:
【中文标题】JSLint:在定义之前使用【英文标题】:JSLint: was used before it was defined 【发布时间】:2012-03-26 03:25:34 【问题描述】:您好,我有 3 个 javascript 文件。
jquery.js utility.js file1.js在 file1.js 我有
jQuery.noConflict()
jQuery(document).ready(function($)
// ....
);
我得到一个错误“jQuery”在定义之前被使用。 并且在定义之前使用了“文档”。
如何安全地消除此警告。
如果我这样做了
var document = document || ;
然后在我的 utility.js 中,如果使用它,它在 IE 中为空,在 Firefox 中正常。
什么是最好的解决方案?
【问题讨论】:
JS Lint: 'shortcut' was used before it was defined 的可能副本。另外,请确保您在选项中选择了 Assume browser。 @ChunpingWang 注意到你仍然活跃在 SO 上,这个问题缺少一个可接受的答案。这些答案中的任何一个是否缺少使它们可以接受的东西?似乎昆汀的回答会按要求解决问题。回答您的问题需要任何其他信息吗? 【参考方案1】:来自the documentation
JSLint 还可以识别 /*global */ 指令,该指令可以向 JSLint 指示此文件中使用的变量已在其他文件中定义。注释可以包含逗号分隔的名称列表。每个名称后面都可以选择跟一个冒号和 true 或 false,true 表示该变量可以由该文件分配,false 表示不允许分配(这是默认值)。该指令尊重函数范围。
可以为您预定义一些全局变量。选择 Assume a browser (browser) 选项以预定义 Web 浏览器提供的标准全局属性,例如 document 和 addEventListener。
例子:
/*jslint browser: true*/
/*global $, jQuery*/
【讨论】:
注意:您不能在global
之前放置空格,因此/* global var, var2 */
不起作用。 /*global var, var2*/
工作
复数是等价的并且也可以工作:/*globals */
并且在添加变量列表时也更有意义
因此,JSLint 抱怨所有文件中缺少某些内容的解决方案是在所有文件中添加一行......这是一个糟糕的建议。
@Cerin — 不,JSLint 抱怨您使用无法找到定义的变量的解决方案是告诉它您在另一个文件中定义了它(而不是,例如,在变量名中打错了会破坏你的程序)。
@Quentin,是的,您的解决方法要求您在每个文件中“告诉它关于 jQuery”。对于没有任何好处的事情来说,这是一项巨大的工作。您也可以简单地在 JSLint 中禁用该检查。【参考方案2】:
正如 Quentin 所说,有一个 /*global*/
指令。
这是一个例子(把它放在文件的顶部):
/*global var1,var2,var3,var4,var5*/
确保初始全局语句与/*
在同一行,否则它会中断。
【讨论】:
以上是关于JSLint:在定义之前使用的主要内容,如果未能解决你的问题,请参考以下文章
使用胖箭头(放屁)语法定义函数时,vim中的JSlint错误