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

我正在使用JSLint来validation我的大部分外部Javascript文件,但是我得到的错误数量最大的是在定义之前使用的函数。

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

看来Firefox,IE7和Chrome都不在乎。 根据JSLint的说法,像stream行的init() (我经常使用)的函数通常会粘在顶部,因为这对我来说是有意义的(我喜欢假装它类似于main() ),所以需要将它推到底部文件。

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

假设你用function关键字声明了所有的函数,我认为它变成了一个编程风格的问题。 就个人而言,我更喜欢以一种看起来合乎逻辑的方式来构build我的function,并使代码尽可能可读。 例如,像你一样,我会在顶部放一个init函数,因为这是所有事情的起点。

由于这是最受好评的谷歌命中和其他人可能不会在jslint工具开始看到它,有一个选项,“允许错误的定义”,可以让你隐藏这种types的错误。

 /*jslint latedef:false*/ 

如果你使用的是jshint,你可以设置latedefnofunc ,它只会忽略迟后的函数定义。

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

用法示例:

 /* jshint latedef:nofunc */ noop(); function noop() {} 

希望这可以帮助。

从jslint的网站( http://www.jslint.com/lint.html )可以看到一个/ * global * /指令,它允许您设置假定在别处声明的variables。

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

 /*global var1,var2,var3,var4,var5*/ 

:真实:虚假实际上并不需要从我的经验,但它看起来像从我在网站上阅读的build议。

确保最初的全局语句与/*在同一行,否则就会中断。

要在jshint为所有文件禁用此警告,请将其放在.jshintrc文件中:

 { "latedef": false } 

在你的.jshintrc文件中,设置:

  "latedef": "nofunc", 

latedef选项被删除是非常不幸的。 当试图用顶部的接口创build一个'class'时,这是非常重要的,

 function SomeClass() { var self = this; self.func = func; function func { ... } } 

这种风格很常见,但不会传递jsLint,因为func在被定义之前被“使用”了。 不得不为每个“成员”function使用全局是一种彻底的痛苦。

你总是可以在顶部声明有问题的函数

例如:var init;

….但是当你进一步得到真正的定义时,你将不得不删除“var”:

init = function(){};