這篇文章主要為大家展示了“javascript回調函數有什么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“javascript回調函數有什么用”這篇文章吧。
在javascript中,回調函數就是一個被作為參數傳遞的函數。函數A作為參數(函數引用)傳遞到另一個函數B中,并且這個函數B執行函數A,函數A就叫做回調函數;如果沒有名稱(函數表達式),就叫做匿名回調函數。
本教程操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
在JavaScript中,函數是對象。 因此,函數可以將函數作為參數,并且可以由其他函數返回。 執行此操作的函數稱為高階函數。 作為參數傳遞的任何函數都稱為回調函數。
回調函數具體的定義為:函數A作為參數(函數引用)傳遞到另一個函數B中,并且這個函數B執行函數A。我們就說函數A叫做回調函數。如果沒有名稱(函數表達式),就叫做匿名回調函數。
出于一個非常重要的原因-JavaScript是一種事件驅動語言。這意味著JavaScript不會繼續等待響應,而是會在偵聽其他事件時繼續執行。讓我們看一個基本的例子:
function first(){ console.log(1); } function second(){ console.log(2); } first(); second();
如你所料,首先執行函數,然后執行第二函數,將以下內容記錄到控制臺:
// 1 // 2
到目前為止一切都很好。
但是,如果函數包含無法立即執行的某些代碼怎么辦? 例如,我們必須先發送請求然后等待響應的API請求? 為了模擬此動作,將使用setTimeout,它是一個JavaScript函數,將在設置的時間后調用該函數。 我們將功能延遲500毫秒以模擬API請求。 我們的新代碼將如下所示:
function first(){ // Simulate a code delay setTimeout( function(){ console.log(1); }, 500 ); } function second(){ console.log(2); } first(); second();
現在了解setTimeout()的工作方式并不重要。重要的是,你看到我們把console.log(1)移到500毫秒延遲內。那么,當我們調用函數時會發生什么呢?
first(); second(); // 2 // 1
即使我們先調用了first()函數,我們在second()函數之后才打印了它的結果。
這并不是說JavaScript沒有按照我們想要的順序執行我們的函數,而是JavaScript在繼續執行second()之前沒有等待first()的響應。
那為什么給你看這個呢?因為你不能在一個函數后調用另一個另一個函數,而又希望它們以正確的順序執行?;卣{是一種確保某些代碼在其他代碼已經完成執行之前不會執行的方法。
好了,話不多說,讓我們創建一個回調!
首先,打開您的Chrome開發者控制臺(Windows:Ctrl + Shift + J)(Mac:Cmd + Option + J),然后在控制臺中鍵入以下函數聲明:
function doHomework(subject) { alert(`Starting my ${subject} homework.`); }
現在讓我們添加回調-作為doHomework()函數中的最后一個參數,我們可以傳入回調。然后在對doHomework()的調用的第二個參數中定義回調函數。
function doHomework(subject, callback) { alert(`Starting my ${subject} homework.`); callback(); } doHomework('math', function() { alert('Finished my homework'); });
可以看到,如果你在控制臺中輸入上述代碼,則會收到兩個alert:“starting homework”alert,然后是“finished homework”alert。
但是,并非總是必須在我們的函數調用中定義回調函數。它們可以在我們的代碼的其他地方定義,如下所示:
function doHomework(subject, callback) { alert(`Starting my ${subject} homework.`); callback(); } function alertFinished(){ alert('Finished my homework'); } doHomework('math', alertFinished);
此示例的結果與前面的示例完全相同,但是設置略有不同。我們可以看到,在doHomework()函數調用期間,我們已將alertFinished函數定義作為參數傳遞。
我們嘗試調用Twitter的API。 向API發出請求時,必須等待響應,然后才能對該響應采取行動。 這是真實回調的一個很好的例子。 請求長這樣:
T.get('search/tweets', params, function(err, data, response) { if(!err){ // This is where the magic will happen } else { console.log(err); } })
T.get意味著我們正在向Twitter發送獲取請求
此請求中包含三個參數:“ search / tweets”(這是我們的請求的路由),params(這是我們的搜索參數)和一個匿名函數(即我們的回調)。
回調在這里很重要,因為我們需要等待服務器的響應才能繼續執行代碼。 我們不知道我們的API請求是否會成功,因此在通過get請求將參數發送到search/tweets后,我們等待。 一旦Twitter響應后,將調用我們的回調函數。 Twitter會向我們發送錯誤(錯誤)對象或響應對象。 在回調函數中,我們可以使用if()語句來確定我們的請求是否成功,然后對新數據采取相應措施。
以上是“javascript回調函數有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。