admin管理员组文章数量:1134247
I'm using JSLint to verify most of my external Javascript files, but the largest amount of errors I'm getting is from functions being used before they're defined.
Is this really an issue I should worry about?
It seems Firefox, IE7 and Chrome don't care. Functions like the popular init()
(which I use often) normally stick at the top as that makes sense to me (I like to pretend it's analogous to main()
) will, according to JSLint, need to be pushed to the bottom of the file.
I'm using JSLint to verify most of my external Javascript files, but the largest amount of errors I'm getting is from functions being used before they're defined.
Is this really an issue I should worry about?
It seems Firefox, IE7 and Chrome don't care. Functions like the popular init()
(which I use often) normally stick at the top as that makes sense to me (I like to pretend it's analogous to main()
) will, according to JSLint, need to be pushed to the bottom of the file.
8 Answers
Reset to default 86As this is the top rated google hit and other people might not be seeing it at first in the jslint tool, there is a option called "Tolerate misordered definitions" that allows you to hide this type of error.
/*jslint latedef:false*/
If you declare functions using the function
keyword, you can use them before they're declared. However, if you declare a function via another method (such as using a function expression or the Function
constructor), you have to declare the function before you use it. See this page on the Mozilla Developer Network for more information.
Assuming you declare all your functions with the function
keyword, I think it becomes a programming-style question. Personally, I prefer to structure my functions in a way that seems logical and makes the code as readable as possible. For example, like you, I'd put an init
function at the top, because it's where everything starts from.
If you're using jshint you can set latedef
to nofunc
, which will ignore late function definitions only.
Documentation - http://www.jshint.com/docs/options/#latedef
Example usage:
/* jshint latedef:nofunc */
noop();
function noop() {}
Hope this helps.
From jslint's website (http://www.jslint.com/lint.html), you can read about a /*global*/ directive that allows you to set variables that are assumed to be declared elsewhere.
Here is an example (put this at the top of the file):
/*global var1,var2,var3,var4,var5*/
The :true :false is not actually needed from my experience, but it looks like it's recommended from what I read on the site.
Make sure the initial global statement is on the same line as /*
, or else it breaks.
To disable this warning in jshint
for all files, place this in your .jshintrc
file:
{
"latedef": false
}
In your .jshintrc
file, set:
"latedef": "nofunc",
it is very unfortunate the latedef option was removed. This is essential when trying to create a 'class' with an interface at the top, ie,
function SomeClass() {
var self = this;
self.func = func;
function func {
...
}
}
This style is very common but does not pass jsLint because func is 'used' before being defined. Having to use global for each 'member' function is a total pain.
You can always declare the offending function at the top
eg: var init;
.... but then you'll have to remove the "var" when you get to the true definition further down:
init = function() { };
本文标签: javascriptJSLint Using a function before it39s defined errorStack Overflow
版权声明:本文标题:javascript - JSLint: Using a function before it's defined error - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736857031a1955756.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论