2012-05-25 216 views
2

在一切我讀過迄今,回調函數作爲參數傳遞到其他功能:傳遞一個JavaScript回調函數作爲參數需要?

function mycallback(){ 
    //dosomething 
} 

function mainfunc(mycallback){ 
    //do something else 
    mycallback(); 
} 

mainfunc(mycallback); 

你所期望的其中一期工程,偉大的。我的問題是,是否需要將回調函數作爲參數傳遞給mainfunc?看起來如果你省略這個:

function mycallback(){ 
    //dosomething 
} 

function mainfunc(){ 
    //do something else 
    mycallback(); 
} 

mainfunc(); 

它工作正常,並與第一個例子相同。但是我沒有看到人們以這種方式使用回調。有理由嗎?我錯過了什麼?

+0

你的第二個例子的工作原理是因爲'mycallback'存在於你的'mainfunc'的外部範圍(的其中一個)中。通常情況並非如此。流行的模式是使用匿名回調函數。 –

+0

'mainfunc'應該總是調用相同的'mycallback'函數,還是有多個回調函數? –

回答

1

如果您希望單個函數處理所有回調,則第二種方法可以正常工作。

通常當你調用一個使用回調的方法時,你希望它在回調中有不同的事情,具體取決於你何時調用它以及從哪裏調用它。而不是在單個回調函數中處理所有不同的情況(然後必須知道它是哪種情況),您可以簡單地爲每個特定情況使用一個回調函數。

1

技術上,是的,你可以使用你的功能。將函數作爲參數傳遞的原因與將任何參數傳遞的原因相同。

mainfunc(eatSevenBurritos); 
mainfunc(eatTwoChimichangas); 

在某些條件下,也許你寧願在通過mainfunc時吃7個捲餅。也許在其他一些情況下,你寧願在通過mainfunc的時候吃2個chimichangas。

如果你總是要運行相同的功能,那麼繼續,如果可以的話,在那裏編碼。毫無意義的複雜性毫無意義。但是如果你需要改變這種行爲,你需要把它作爲一個參數。

當人們談論「頭等功能」時,這種行爲就是他們的意思。能夠將函數作爲參數來處理。因爲行爲是一種數據。

2

當您有異步任務時,最好使用回調。

比方說mainfunc是一個異步操作。

  • 在第一個示例中,您將特定回調交給了mainfunc。這使您可以靈活地爲調用者分配操作後執行的功能。

  • 第二個例子,你硬編碼的回調。除非您有理由這樣做,如預先確定的後處理功能,否則這並不靈活。

+0

這是一個很好的觀點。 –

相關問題