1. 程式人生 > >js中的回調函數

js中的回調函數

外包 簡單的 執行 條件 click 都是 別人 function set

回調函數 : 函數作為參數傳遞到另外一個函數中。簡單數據類型和引入數據類型中的數組和對象作為參數傳遞大家肯定都不陌生,其實引用數據類型中的函數也是可以的。

事實上大家見到的很多,用到的也很多,比如jQuery中的一些事件,定時器。這些呢都是別人搞好的,大家直接用,所以就沒有太在意。

/註意到click方法中是一個函數而不是一個變量

//它就是回調函數
$("#btn_1").click(function() {
  alert("Btn 1 Clicked");
}); 
它也是回調函數
setInterval(function(){
console.log(‘回調函數‘)
})
回調函數是如何運作的呢?
我們把一個函數傳入,那麽這個函數什麽時候執行,執行的條件是什麽?
這個是由被調用的函數決定的,被調用函數可以在一個適當的條件去觸發這個回調函數,
比如上訴點擊事件,什麽時候觸發這個函數呢?那就是點擊的時候,其實jQuery封裝的時候,也可以函數調用的時候立馬執行,也可以把傳入的函數放入定時器,間隔一段事件執行,
那麽這些毫無意義嘛!!!總之就是傳入的這個函數執行條件,時間,同步或異步都可以隨意控制,很強大。

回調函數其實也是閉包:
如何理解這個呢? 當我們把這個函數當參數傳遞到其他函數時候,那麽其實會形成閉包的。大家想想閉包的概念,內部函數應用外包函數變量。當然其實傳入的函數也不一定非要應用外部函數的變量。
function fn(id, check) { info = { id: id } console.log(id) check(info) }
fn(1, function(data) { console.log(data) }) 上面是我寫的一個簡單的回調函數,當然沒有任何意義啊,只是寫出來便於看的, fn函數帶用的時候傳入一個函數,這個函數調用時候,其實有一個傳值問題,大家應該可以看出來吧,其實很多時候,我們是可以利用回調函數傳值的, 1傳到上訴fn函數中,fn函數中的info同時也傳到了fn調用中的data

  

js中的回調函數