https://github.com/forsigner/blog/blob/master/source/_posts/javascript-callback.md
在JavaScript中,回調函數的使用非常頻繁。特別是在各種Javascript庫中,經常在一個函數中使用回調函數,例如jQuery中的each()方法。一年以來,在使用各種有回調函數的函數時,都沒有去深究其內部的實現原理真,慚愧。在有米實習時,在讀js師兄的代碼時,偶然看到他寫的一個函數是他自己實現回調函數的,當時感覺很神奇,原來這就是回調函數啊,之后google了很多關於Javascript回調函數的資料,終於大概弄明白回調函數是什么了。以下是自己對回調函數的一些理解。
回調函數定義:... 理論一直是我的弱項,定義暫時沒法定,以后弄懂再補上,我暫時只懂它的用法orz。
回調函數的基本實現:
// 聲明一個函數,它的參數是一個函數fn function example(fn) { // 回調前,可以do something alert('我是回調前執行的代碼'); // 存在fn則直接用,不存fn在則用函數表達式的方式聲明一個 fn = fn || function() {}; fn(); // 調用傳進來的fn } // 調用傳進來的fn function callback() { alert('I am callback!') } example(callback); // 調用函數a
這個例子展示回調函數基本實現方法,實現回調的關鍵是把一個函數當成另一個參數。當然實踐中很少用上面方式去使用回調函數,一般把一個匿名函數傳入當成回調函數,這種方法在Javascript中使用非常廣泛,下面是一個基本的例子。
// 聲明一個函數,它的參數是一個函數fn function example(fn) { // 回調前,可以do something alert('我是回調前執行的代碼'); // 存在fn則直接用,不存fn在則用函數表達式的方式聲明一個 fn = fn || function() {}; fn(); // 調用傳進來的fn } // 把匿名函數當做參數 example(function() { alert('I am callback!') });
使用匿名函數作為參數,不僅可以極少代碼,也讓代碼更好管理,更加靈活。
任何函數都是可以傳入參數的,回調函數一樣:
// 聲明一個函數,它的參數是一個函數fn function example(a, fn) { // 回調前,可以do something alert(a); // 存在fn則直接用,不存fn在則用函數表達式的方式聲明一個 fn = fn || function() {}; fn(m); // 調用傳進來的fn } // 把匿名函數當做參數 var m = 'I am callback!'; example('我是回調前執行的代碼', function(m) { alert(m) });
以上就是Javascript回調函數的實現方法和簡單用法,關於回調函數的作用,我的理解是:其實,每個函數的定義都是為了實現某些功能,在一個擁有回調函數的函數中,一般把實現一個功能的通用代碼寫在回調函數前,其實后也可以,而開發者在回調函數中自定義自己需要的功能。文藝一點,就是回調函數讓世界更加多姿多彩。
done。
