我正在使用 JSLint 来验证我的大多数外部 Javascript 文件,但我得到的最大错误数来自于在定义之前使用的函数。
这真的是我应该担心的问题吗?
似乎 Firefox、IE7 和 Chrome 不在乎。根据 JSLint 的说法,像流行的init()
(我经常使用的)这样的函数通常贴在顶部,因为这对我来说很有意义(我喜欢假装它类似于),需要将其推到文件的底部。main()
我正在使用 JSLint 来验证我的大多数外部 Javascript 文件,但我得到的最大错误数来自于在定义之前使用的函数。
这真的是我应该担心的问题吗?
似乎 Firefox、IE7 和 Chrome 不在乎。根据 JSLint 的说法,像流行的init()
(我经常使用的)这样的函数通常贴在顶部,因为这对我来说很有意义(我喜欢假装它类似于),需要将其推到文件的底部。main()
由于这是评价最高的 google hit 并且其他人可能一开始在 jslint 工具中看不到它,因此有一个名为“Tolerate misordered definitions”的选项允许您隐藏此类错误。
/*jslint latedef:false*/
如果使用function
关键字声明函数,则可以在声明之前使用它们。但是,如果您通过其他方法声明函数(例如使用函数表达式或Function
构造函数),则必须在使用之前声明该函数。有关更多信息,请参阅Mozilla 开发人员网络上的此页面。
假设您使用function
关键字声明所有函数,我认为这将成为一个编程风格的问题。就个人而言,我更喜欢以一种看起来合乎逻辑的方式来构建我的函数,并使代码尽可能地可读。例如,像你一样,我会init
在顶部放置一个函数,因为它是一切的起点。
如果您使用的是 jshint,您可以设置latedef
为nofunc
,这将仅忽略后期函数定义。
文档 - http://www.jshint.com/docs/options/#latedef
示例用法:
/* jshint latedef:nofunc */
noop();
function noop() {}
希望这可以帮助。
从 jslint 的网站 ( http://www.jslint.com/lint.html ),您可以了解 /*global*/ 指令,该指令允许您设置假定在其他地方声明的变量。
这是一个示例(将其放在文件顶部):
/*global var1,var2,var3,var4,var5*/
根据我的经验,实际上并不需要 :true :false ,但从我在网站上阅读的内容来看,它似乎是推荐的。
确保初始全局语句与 位于同一行/*
,否则它会中断。
要为所有文件禁用此警告jshint
,请将其放在您的.jshintrc
文件中:
{
"latedef": false
}
在您的.jshintrc
文件中,设置:
"latedef": "nofunc",
很不幸,latedef 选项被删除了。当试图创建一个顶部有接口的“类”时,这是必不可少的,即
function SomeClass() {
var self = this;
self.func = func;
function func {
...
}
}
这种风格很常见,但不会通过 jsLint,因为 func 在定义之前已“使用”。必须为每个“成员”功能使用全局是一件非常痛苦的事情。
您始终可以在顶部声明有问题的函数
例如:变量初始化;
....但是当您进一步了解真实定义时,您将不得不删除“var”:
初始化 = 函数() { };