摘要:在中回調(diào)函數(shù)非常重要,它們幾乎無處不在。首先你得先明白一點函數(shù)也是對象想弄明白回調(diào)函數(shù),首先的清楚地明白函數(shù)的規(guī)則。理解了函數(shù)也是對象,先不急聊回調(diào)函數(shù),先看看下面代碼只寫變量名返回的將會是方法本身,以字符串的形式表現(xiàn)出來。
在javascript中回調(diào)函數(shù)非常重要,它們幾乎無處不在。像其他更加傳統(tǒng)的編程語言都有回調(diào)函數(shù)概念,但是非常奇怪的是,完完整整談論回調(diào)函數(shù)的在線教程比較少,倒是有一堆關于call()和apply()函數(shù)的,或者有一些簡短的關于callback的使用示例。
首先你得先明白一點:
想弄明白回調(diào)函數(shù),首先的清楚地明白函數(shù)的規(guī)則。先來看個例子:
//可以這樣創(chuàng)建函數(shù) var fn = new Function("arg1", "arg2", "return arg1 * arg2;"); fn(2, 3); //6
這樣做的一個好處,可以傳遞代碼給其他函數(shù),也可以傳遞正則變量或者對象(因為代碼字面上只是對象而已)。
在javascript中,函數(shù)是比較奇怪的,但它確確實實是對象。確切地說,函數(shù)是用Function()構造函數(shù)創(chuàng)建的Function對象。Function對象包含一個字符串,字符串包含函數(shù)的javascript代碼。
理解了函數(shù)也是對象,先不急聊回調(diào)函數(shù),先看看下面代碼:
function say (value) { alert(value); } alert(say); alert(say("hi js."));
js中函數(shù)可以作為參數(shù)傳遞只寫變量名 say 返回的將會是 say方法本身,以字符串的形式表現(xiàn)出來。
而在變量名后加()如say()返回的就會使say方法調(diào)用后的結果,這里是彈出value的值。
再看下面兩段代碼:
function say (value) { alert(value); } function execute (someFunction, value) { someFunction(value); } execute(say, "hi js.");
與
function execute (someFunction, value) { someFunction(value); } execute(function(value){alert(value);}, "hi js.");
上面第一段代碼是將say方法作為參數(shù)傳遞給execute方法
第二段代碼則是直接將匿名函數(shù)作為參數(shù)傳遞給execute方法
實際上:
function say (value) { alert(value); } // 注意看下面,直接寫say方法的方法名與下面的匿名函數(shù)可以認為是一個東西 // 這樣再看上面兩段代碼是不是對函數(shù)可以作為參數(shù)傳遞就更加清晰了 say; function (value) { alert(value); }
這里的say或者匿名函數(shù)就被稱為回調(diào)函數(shù)!
如果還不懂,看看下面并不是很完美的比喻:
你到一個商店買東西,剛好你要的東西沒有貨,于是你在店員那里留下了你的電話,過了幾天店里有貨了,店員就打了你的電話,然后你接到電話后就到店里去取了貨。在這個例子里,你的電話號碼就叫回調(diào)函數(shù),你把電話留給店員就叫登記回調(diào)函數(shù),店里后來有貨了叫做觸發(fā)了回調(diào)關聯(lián)的事件,店員給你打電話叫做調(diào)用回調(diào)函數(shù),你到店里去取貨叫做響應回調(diào)事件。
兩種回調(diào)函數(shù)傳參的方法:
將回調(diào)函數(shù)的參數(shù)作為與回調(diào)函數(shù)同等級的參數(shù)進行傳遞
回調(diào)函數(shù)的參數(shù)在調(diào)用回調(diào)函數(shù)內(nèi)部創(chuàng)建
希望我對回調(diào)函數(shù)的一點點小總結能對大家有幫助,
關于回調(diào)函數(shù)還有什么問題可以在下面留言,一起交流。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/89811.html
摘要:回調(diào)函數(shù)不是由該函數(shù)的實現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時由另外的一方調(diào)用的,用于對該事件或條件進行響應。若是使用回調(diào)函數(shù)進行處理,代碼就可以繼續(xù)進行其他任務,而無需空等。參考理解回調(diào)函數(shù)理解與使用中的回調(diào)函數(shù)這篇相當不錯回調(diào)函數(shù) 為什么寫回調(diào)函數(shù) 對于javascript中回調(diào)函數(shù) 一直處于理解,但是應用不好的階段,總是在別人家的代碼中看到很巧妙的回調(diào),那時候會有wow c...
摘要:的翻譯文檔由的維護很多人說,阮老師已經(jīng)有一本關于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。 JavaScript Promise 迷你書(中文版) 超詳細介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:例如處理請求的線程處理事件的線程定時器線程讀寫文件的線程例如在中等等。事件循環(huán)事件循環(huán)是指主線程重復從消息隊列中取消息執(zhí)行的過程。事件觸發(fā)時,表示異步任務完成,會將事件監(jiān)聽器函數(shù)封裝成一條消息放到消息隊列中,等待主線程執(zhí)行。 一. 單線程 我們常說JavaScript是單線程的。 所謂單線程,是指在JS引擎中負責解釋和執(zhí)行JavaScript代碼的線程只有一個。不妨叫它主線程。 但是實...
摘要:瀏覽器是多進程的詳情看我上篇總結瀏覽器執(zhí)行機制的文章深入前端徹底搞懂瀏覽器運行機制瀏覽器每打開一個標簽頁,就相當于創(chuàng)建了一個獨立的瀏覽器進程。執(zhí)行異步操作事件完成,回調(diào)函數(shù)進入。主線程從讀取回調(diào)函數(shù)并執(zhí)行。 最近看了很多關于JS運行機制的文章,每篇都獲益匪淺,但各有不同,所以在這里對這幾篇文章里說的很精辟的地方做一個總結,參考文章鏈接見最后。本文博客地址 了解進程和線程 進程是應用...
摘要:瀏覽器是多進程的詳情看我上篇總結瀏覽器執(zhí)行機制的文章深入前端徹底搞懂瀏覽器運行機制瀏覽器每打開一個標簽頁,就相當于創(chuàng)建了一個獨立的瀏覽器進程。執(zhí)行異步操作事件完成,回調(diào)函數(shù)進入。主線程從讀取回調(diào)函數(shù)并執(zhí)行。 最近看了很多關于JS運行機制的文章,每篇都獲益匪淺,但各有不同,所以在這里對這幾篇文章里說的很精辟的地方做一個總結,參考文章鏈接見最后。本文博客地址 了解進程和線程 進程是應用...
閱讀 3108·2021-09-22 15:54
閱讀 3996·2021-09-09 11:34
閱讀 1778·2019-08-30 12:48
閱讀 1169·2019-08-30 11:18
閱讀 3439·2019-08-26 11:48
閱讀 923·2019-08-23 17:50
閱讀 2125·2019-08-23 17:17
閱讀 1250·2019-08-23 17:12