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,你可以设置latedef
为nofunc
,它只会忽略迟后的函数定义。
文档 – 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(){};