2010-10-08 32 views
7

在JavaScript中,它非常受庫/框架的歡迎,讓我們可以爲數據後處理定義回調函數。load()函數如何讓用戶提供回調?

例如。

load("5", function(element) { 
    alert(element.name); 
}); 

我不知道load()函數是如何看起來能夠讓用戶提供回調的嗎?

有沒有很好的教程呢?

回答

13

好了,load功能看起來是這樣的:

function load(arg, callback) { 

    var element = { name: "foo " + arg }; // something to pass 

    if (typeof callback == 'function') { 
    callback(element); 
    } 
} 

隨着typeof檢查我們確保回調參數是一個我們可以調用的對象,一個func灰。

然後你的例子:

load("5", function(element) { 
    alert(element.name); // Will show `"foo 5"`. 
}); 
+0

哇..那簡單吧。 – 2010-10-08 08:33:33

1

功能就像正常的類型,也可以作爲參數傳遞:

function load(param1, callback) { 
    // call the callback parameter one second later 
    setTimeout(function() { 
     callback(param1); 
    }, 1000); 
} 
2
function load(foo, callback) { 
    blah(foo); 
    callback(); 
} 
2
function load(number, callback){ 

    // do something 

    if (callback) { 
     callback(); 
    } 

} 
4

在使用JavasScript函數是第一類對象。這幾乎意味着他們像其他內置類型一樣行事。你可以將它們分配給變量,它們傳遞到功能等

這篇文章是一個有用的鏈接解釋函數作爲第一類對象如何在JavaScript中工作: http://helephant.com/2008/08/functions-are-first-class-objects-in-javascript/

喬爾斯波斯基都有詳細而有趣的解釋最後http://www.joelonsoftware.com/items/2006/08/01.html

,因爲他們是第一類對象,功能可以非常容易地接受其他功能參數:一些有趣的事情/方法可以在JavaScript中使用函數作爲第一類對象

要注意
0
function(callback,argumentArray) { 
    var result = callback.apply(this,argumentArray); 
} 

點:

  • this可以null。在這種情況下,如果在回調實現中使用this,那麼它將指向Global對象。
  • argumentArray實際上是回調方法所需參數的JavaScript Array
相關問題