2012-05-02 95 views
0

我有一个是这样的为什么这个函数首先在这个Jquery代码中?

verify_loaded_css.check (function(){ 
    $('#overlay').fadeOut(300, function(){ 
     $(this).remove(); 
    }); 
}); 

verify_loaded_css = { 
    check: function (runCallback){ 
     if (..) { 
      .. 
      runCallback(); 
     } else { 
      .. 
     } 
    } 
} 

我放置随机数的console.log,看看哪些功能首先运行的代码(没有更好的办法来做到这一点?)。我发现check函数(runCallback)首先运行,我试图理解逻辑。当你有一个匿名函数时,我认为它会自动执行任何在#overlay后淡出的内容。相反,它首先运行if语句的runCallback函数,如果为true,则再次调用runCallback()。然后在最后,它将覆盖层淡出。

这是否意味着任何匿名函数都不是自动执行的,并且如果您将其声明为别的东西,它会首先在别处运行任何代码?

谢谢

+0

他们在代码中的顺序?因为如果是这样,它应该为verify_loaded_css抛出一个错误而不被声明。 – DanRedux

回答

1

这是否意味着任何匿名函数没有自动执行,它会如果你宣布它别的东西在其他地方先运行任何代码?

正确的,匿名功能是而不是自动执行。

函数按照它们被调用的顺序运行,就像在其他语言中一样,但是作为ai.farfa提到函数是对象并且可以传递,因此回调的概念。

你说:

我看到检查功能(runCallback)运行第一

但是一个更好的方式来写它是:

check(function(){/* code in here */}) 

所以会发生什么是你输入check,并且runCallback被绑定到被定义为它的参数的function object

因此,这是语义相似(这将是如果JS不是语义相同这样的weird language)到:

function myFadout() {/* code in here */}; 

check(myFadout); 

在两种情况下的参数check表示操作的相同序列,和函数对象只是一个方便的抽象 - 无论是有名的还是无名的。 因此,一旦你到达行runCallback(),因为runCallback绑定到myFadout,会发生什么语义上相当于myFadout()

1

在JavaScript中,每件事物都是对象。甚至出现了“功能”

你可以声明的功能即时

提示*从下往上读。

var fadeoutCallback = function (element){ 
    $(element).remove(); 
} 

var checkCallback = function(){ 
    //alert("fadeout the overlay"); 
    $('#overlay').fadeOut(300, fadeoutCallback); 
} 

//a function that accept another instant of function 
var check = function(callback){ 
    if(confirm("checking some condition?") == true){ 
     callback(); 
    } 
} 

//finally an object act as "class" 
myClass = { 
    myMethod: check 
} 

//then calling class.method 
myClass.myMethod(checkCallback); 
+0

这并不是那么简单。 'typeof 1 ==='number'',但'typeof new Number(1)==='object''。 (对于其他原语也是如此。)然而,这还不是全部。由于拳击和拆箱,它更加复杂。我认为如果你称他们为* values *而不是* objects *,你的答案会更加清晰和正确。 – icktoofay

+0

谢谢,也'typeof函数(){} ===“函数”'但你可以把它看作一个值。 – aifarfa

相关问题