JavaScript 回撥函式

admin發表於2018-10-13

回撥函式並不是一種新函式,而是函式的一種使用方式。

應用十分廣泛,甚至當我們還不知道回撥函式這個概念的時候,已經在程式碼中應用它。

首先看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function callback(){
  console.log("螞蟻部落");
}
setTimeout(callback, 2000);

代在兩秒之後列印出字串"螞蟻部落",callback被用作回撥函式。

程式碼是不是非常的簡單,由此可能會導致初學者根本就沒有意識正在應用回撥函式。

回撥函式概念十分簡單,很多時候由於"回撥函式(callback)"這個貌似高大上的名字產生一些"恐懼感"。

一.回撥函式概念:

什麼是回撥函式,英文文件介紹如下:

[HTML] 純文字檢視 複製程式碼
A callback is a function that is passed as an argument to 
another function and is executed after its parent function has completed.

翻譯成漢語大致意思是,回撥函式作為引數傳遞給另一個函式,當主體函式執行完畢後,再去執行回撥函式。

通俗的說,就是一個函式作為引數傳遞給另一個函式,當某個事件發生後,觸發回撥函式的執行。

現在對前面的程式碼做一下分析:

(1).將函式callback作為引數傳遞給setTimeout函式。

(2).callback執行的時機是setTimeout函式執行後的2秒。

如果再通俗一點,可以從它的名字"回撥函式"來理解記憶,回撥函式就是先把函式準備好,回頭時機到了再呼叫。

上述理解方式好像有點牽強附會,但是對於理解記憶可能有所幫助。

二.傳遞的是函式物件:

一定要注意,傳遞的是函式物件。

程式碼如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function callback(){
  console.log("螞蟻部落");
}
setTimeout(callback(), 2000);

上述程式碼中,setTimeout第一個引數傳遞的不是callback函式物件,而是callback函式的返回值。由於callback的返回值是undefined,自然就會報錯。

如果callback函式的返回值是一個函式物件,那麼就沒什麼問題了。

程式碼修改如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function callback(){
  return function(){
    console.log("螞蟻部落");
  }
}
setTimeout(callback(), 2000);

上述程式碼依然會在兩秒後列印出"螞蟻部落"。

因為callback返回一個函式物件,所以實質上給setTimeout傳遞的依然是一個函式物件。

相關文章