Javascript 带参数的回调

Javascript 带参数的回调,javascript,callback,Javascript,Callback,我有jQuery函数: $('#fetch').click( function() { ... GetPage( curPage, items, DrawItemSet( items ) ) }); 如您所见,我希望回调函数DrawItemSet从函数内部执行。有时,我需要调用的不是DrawItemSet,而是一些其他函数。。我只想从GetPage函数调用任何需要调用的函数。我拿到那一页后(你可能会猜到),有必要做一些后续工作。在这个例子中,我想显示一些数据。在其他情况下,我不

我有jQuery函数:

$('#fetch').click( function() {
    ...
    GetPage( curPage, items, DrawItemSet( items ) )
});
如您所见,我希望回调函数DrawItemSet从函数内部执行。有时,我需要调用的不是DrawItemSet,而是一些其他函数。。我只想从GetPage函数调用任何需要调用的函数。我拿到那一页后(你可能会猜到),有必要做一些后续工作。在这个例子中,我想显示一些数据。在其他情况下,我不想显示一些文本,但是,例如,交换从GetPage函数中获得的信息。在这种情况下,我的想法是写下如下内容:

...
GetPage( curPage, items, SwapItemSet( oldItems ) )  
现在看来,一切都很好

下面是我的GetPage列表:

function GetPage( pageNum, collection, callback ) {
    console.log( 'Starting to get page number ' + pageNum )
    $.ajax({
    url:        'http://www.xxxxxxxxxxx.php?page=' + pageNum,
    type:       'get',
    dataType:   '',
    success: function(data) {
        ...
        console.log( 'Curpage=' + curPage + ' MaxPage=' + maxPages )
        if( curPage < maxPages ) {
            curPage = curPage + 1
            GetPage( curPage, collection, callback )
        }
        else {
            console.log( 'passed' )
            callback()
        }
    }
});
}  
我的问题是,理论上一切看起来都正常,我应该在控制台DrawItemSet中获取最后一条消息,这意味着回调函数是在抓取完成后调用的。好。。相反,我得到的是:

DrawItemSet called.
Starting to get page number 1
Curpage=1 MaxPage=2
Starting to get page number 2 
Curpage=2 MaxPage=2 
passed 
这意味着回调函数是第一个被执行的函数


怎么会这样

当您编写
DrawItemSet(items)
时,您将立即调用
DrawItemSet
,然后将其返回值作为
callback
传入。这就是为什么它被称为“第一”。您甚至在调用
GetPage
之前就调用了它

有几种方法可以将其作为带有参数的回调传递。最常见的方法是传入一个匿名函数,如下所示:

GetPage( curPage, items, function(){ DrawItemSet( items ) } );
在现代浏览器中,您还可以使用:

也可以使用jQuery版本的bind,名为:


非常感谢你!我现在将使用第一个变体。
GetPage( curPage, items, function(){ DrawItemSet( items ) } );
GetPage( curPage, items, DrawItemSet.bind(null, items) );
GetPage( curPage, items, $.proxy(DrawItemSet, null, items) );