为什么这个函数在这个Jquery代码中是第一个?

时间:2012-05-02 03:29:17

标签: jquery callback

我有一个像这样的代码

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

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

我用随机数放置了console.log以查看哪些函数首先运行(有更好的方法吗?)。我看到检查函数(runCallback)首先运行,我正在尝试理解逻辑。当你有一个匿名函数时,我认为它会自动执行#overlay淡出之后的任何内容。相反,它首先运行runCallback函数,它运行if语句,如果为true则再次调用runCallback()。然后在最后,它将覆盖层淡出。

这是否意味着任何匿名函数都不是自动执行的,如果您声明了其他内容,它会先在其他地方运行任何代码?

谢谢

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

  

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

正确,匿名函数自行执行。

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

你说:

  

我看到check函数(runCallback)首先运行

但更好的写作方式是:

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

所以会发生什么事情,你进入checkrunCallback被绑定到被定义为其参数的function object

所以这在语义上是相似的(如果js不是weird language,它在语义上是相同的):

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

check(myFadout);

在这两种情况下,check的参数代表相同的操作序列,而函数对象只是一种方便的抽象 - 无论是命名的还是无名的。 因此,一旦你到达runCallback()行,由于runCallback绑定到myFadout 在语义上等同于myFadout()