JSLint:在定义错误之前使用函数

Chr*_*s S 73 javascript jslint

我正在使用JSLint来验证我的大多数外部Javascript文件,但我得到的最大错误来自于在定义之前使用的函数.

这真的是我应该担心的问题吗?

看来Firefox,IE7和Chrome都不在乎.像JSLint 一样,流行​​的init()(通常我经常使用的)函数通常会粘在顶部,因为这对我来说main()是合理的(我喜欢假装它类似)将需要被推到文件的底部.

kon*_*tur 84

由于这是最受欢迎的google热门,其他人可能最初没有在jslint工具中看到它,因此有一个名为"Tolerate misordered definitions"的选项可以隐藏这种类型的错误.

/*jslint latedef:false*/
Run Code Online (Sandbox Code Playgroud)

  • 将该选项设置为"true"似乎并没有为我"解决"这个问题. (5认同)
  • @PeterMajeed不,不是.克里斯没有询问如何容忍错误的定义. (4认同)

Ste*_*son 69

如果使用function关键字声明函数,则可以在声明它们之前使用它们.但是,如果通过其他方法声明函数(例如使用函数表达式或Function构造函数),则必须在使用之前声明该函数.有关更多信息,请参阅Mozilla开发人员网络上的此页面.

假设您使用function关键字声明所有函数,我认为它成为一个编程风格的问题.就个人而言,我更喜欢以一种看似合乎逻辑的方式构造我的函数,并使代码尽可能可读.例如,和你一样,我会init在顶部放置一个函数,因为它就是从一切开始的地方.

  • 我也更喜欢init方法。所以它使用的功能在下面。如何忽略或破解此错误,因为它使我无法看到代码中的下一个JsLint错误?我想要一种通用的方式来保持我的风格,但看不到此错误。 (2认同)

Jan*_*lak 33

如果您正在使用jshint,则可以设置latedefnofunc,这将仅忽略后期函数定义.

文档 - http://www.jshint.com/docs/options/#latedef

用法示例:

/* jshint latedef:nofunc */

noop();

function noop() {}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • +1.设置"latedef":.jshintrc中的"nofunc"对我有用. (2认同)
  • 这是jshint的解决方案吗?我使用"Brackets",我收到了很多棉绒警告.lint是否应与此提示解决方案兼容.我没有得到它的工作. (2认同)

sta*_*ton 11

从jslint的网站(http://www.jslint.com/lint.html),您可以阅读有关/*global*/指令的信息,该指令允许您设置假定在其他地方声明的变量.

这是一个例子(把它放在文件的顶部):

/*global var1,var2,var3,var4,var5*/
Run Code Online (Sandbox Code Playgroud)

:true:从我的经验中实际上并不需要false,但它看起来像是我在网站上看到的建议.

确保初始全局语句与其在同一行/*,否则它会中断.

  • 同样对我来说,全球一词必须直接在星号后面,没有空格,否则它将被忽略. (3认同)