我正在使用JSLint来验证我的大多数外部Javascript文件,但我得到的最大错误来自于在定义之前使用的函数。
这真的是我应该担心的问题吗?
似乎Firefox,IE7和Chrome都不在乎。像JSLint所说,像流行的init()
(我经常使用)这样的函数通常会粘在顶部,因为这对我来说是合理的(我喜欢假装它类似于main()
)到文件的底部。
答案 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(){ };