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

时间:2009-04-30 09:45:32

标签: javascript jslint

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

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

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

8 个答案:

答案 0 :(得分:84)

由于这是最受欢迎的谷歌热门,而其他人可能最初没有在jslint工具中看到它,因此有一个名为“容忍错误定义”的选项可以隐藏此类错误。

/*jslint latedef:false*/

答案 1 :(得分:69)

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

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

答案 2 :(得分:33)

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

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

使用示例:

/* jshint latedef:nofunc */

noop();

function noop() {}

希望这有帮助。

答案 3 :(得分:11)

从jslint的网站(http://www.jslint.com/lint.html),你可以阅读一个/ * global * /指令,它允许你设置假定在其他地方声明的变量。

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

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

:true:从我的经验中实际上并不需要假,但看起来我建议从网站上阅读。

确保初始全局声明与/*位于同一行,否则会中断。

答案 4 :(得分:2)

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

{
   "latedef": false
}

答案 5 :(得分:2)

.jshintrc文件中,设置:

  "latedef": "nofunc",

答案 6 :(得分:1)

非常不幸的是,latedef选项被删除了。在尝试创建课程时,这一点至关重要。在顶部有一个界面,即

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

   function func {
      ...
   }
}

这种风格很常见,但是没有传递jsLint,因为使用了func'在被定义之前。必须为每个'成员使用全局'功能是一种彻底的痛苦。

答案 7 :(得分:0)

您始终可以在顶部

声明违规功能

例如: var init;

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

init = function(){ };