JS函数定义顺序

时间:2013-12-25 14:33:46

标签: javascript

非常快速的问题,因为我有一些奇怪的错误,我找不到任何关于此的文档。 是否在文件中定义了哪些函数?

例如:

function a() {
  b(); //defined below the current function
}

function b() {
  //do something
}

它被认为是正确的还是我必须记住订单?

4 个答案:

答案 0 :(得分:5)

由于变量提升,“var语句和函数声明将被移动到其封闭范围的顶部”[1]。

这有时会导致陷阱,但只要加载了包含该函数的文件,顺序就不重要了。

[1] http://bonsaiden.github.io/JavaScript-Garden/#function.scopeshttp://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后,它将被视为单个文件或脚本;这就是为什么即使在同一页面上使用两个不同的脚本文件,你也可能没有相同签名的功能。

Fiddle with both cases

a();
c();

function a() {
    b(); //defined below the current function
}

function b() {
    alert("called b");
}

function c() {
    b();//defined above the current function
}