首頁  >  文章  >  web前端  >  js為什麼回調?

js為什麼回調?

little bottle
little bottle原創
2019-05-31 13:20:312326瀏覽

在Javascript中,函數是第一類對象,這表示函數可以像對像一樣按照第一類管理被使用。既然函數其實是物件:它們能被「儲存」在變數中,能作為函數參數被傳遞,能在函數中被創建,能從函數中傳回。因為函數是第一類對象,我們可以在Javascript使用回呼函數。下面我們一起了解一下回調。

js為什麼回調?

簡單地講:回呼是指在另一個函數執行完成之後被呼叫的函數

稍複雜地講: 在JavaScript 中,函數也是物件。因此,函數可以傳入函數作為參數,也可以被其他函數傳回。 這樣的函數稱為高階函數。被傳入為參數的函數就叫做回呼函數。

下面說說為什麼我們需要回呼?

有一個非常重要的原因-JavaScript是事件驅動的語言。這意味著,JavaScript不會因為要等待一個回應而停止目前運行,而是在監聽其他事件時繼續執行。

來看一個基本的範例:

function first(){
  console.log(1);
}
function second(){
  console.log(2);
}
first();
second();

如你所料,first 函數先被執行,接著second 會被執行- 控制台輸出下面內容:

// 1
// 2

但如果函數first 包含某種無法立即執行的程式碼會如何呢?

例如我們必須傳送請求然後等待回應的 API 請求?為了模擬這種狀況,我們將使用 setTimeout,它是一個在一段時間之後呼叫函數的 JavaScript 函數。我們將函數延遲500 毫秒來模擬一個API 請求,新程式碼長這樣:

function first(){
// 模拟代码延迟
  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() 回應的問題。

所以為什麼給你看這個?

因為你不能一個接一個地呼叫函數並希望它們按照正確的順序執行。

回呼正是確保一段程式碼執行完畢之後再執行另一段程式碼的方式。

以上是js為什麼回調?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn