非常快速的问题,因为我有一些奇怪的错误,我找不到任何关于此的文档。 是否在文件中定义了哪些函数?
例如:
function a() {
b(); //defined below the current function
}
function b() {
//do something
}
它被认为是正确的还是我必须记住订单?
答案 0 :(得分:5)
由于变量提升,“var语句和函数声明将被移动到其封闭范围的顶部”[1]。
这有时会导致陷阱,但只要加载了包含该函数的文件,顺序就不重要了。
[1] http://bonsaiden.github.io/JavaScript-Garden/#function.scopes,http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html
答案 1 :(得分:3)
在JavaScript中,只要被调用的函数存在,创建的函数顺序无关紧要。
答案 2 :(得分:2)
您遇到的问题是可变吊装。详细了解here
根据Crockford的JSLint,这被认为是不合适的。但是,只要您以这种方式定义函数就没关系。例如,您的代码可以使用,但类似
function a(){
b();
}
function b(){
//do something
}
会奏效,但
function a(){
b();
}
var b=function(){//do something};
无效。
所以基本上,如果在你打电话之前加载了所有东西,你应该没问题。考虑将其包装在$("window").load()
答案 3 :(得分:1)
不,功能在哪里无关紧要。它可以在文件的顶部,在文件的底部,甚至在另一个文件中。什么是存在。
加载JavaScript后,它将被视为单个文件或脚本;这就是为什么即使在同一页面上使用两个不同的脚本文件,你也可能没有相同签名的功能。
a();
c();
function a() {
b(); //defined below the current function
}
function b() {
alert("called b");
}
function c() {
b();//defined above the current function
}