JavaScript 回調
"I will call back later!"
回調 (callback) 是作為參數傳遞給另一個函數的函數
這種技術允許函數調用另一個函數
回調函數可以在另一個函數完成后運行
函數序列
JavaScript 函數按照它們被調用的順序執行。而不是以它們被定義的順序。
此例最終將顯示 "Goodbye":
實例
function myFirst() { myDisplayer("Hello"); } function mySecond() { myDisplayer("Goodbye"); } myFirst(); mySecond();
本例子最終會顯示 "Hello":
實例
function myFirst() { myDisplayer("Hello"); } function mySecond() { myDisplayer("Goodbye"); } mySecond(); myFirst();
順序控制
有時您希望更好地控制何時執行函數。
假設您要進行計算,然后顯示結果。
您可以調用計算器函數 (myCalculator
),保存結果,然后調用另一個函數 (myDisplayer
) 來顯示結果:
實例
function myDisplayer(some) { document.getElementById("demo").innerHTML = some; } function myCalculator(num1, num2) { let sum = num1 + num2; return sum; } let result = myCalculator(5, 5); myDisplayer(result);
或者,您可以調用計算器函數 (myCalculator
),并讓計算器函數調用顯示函數 (myDisplayer
):
實例
function myDisplayer(some) { document.getElementById("demo").innerHTML = some; } function myCalculator(num1, num2) { let sum = num1 + num2; myDisplayer(sum); } myCalculator(5, 5);
上面第一個例子的問題是你必須調用兩個函數來顯示結果。
第二個例子的問題是您無法阻止計算器函數顯示結果。
現在是引入回調的時候了。
JavaScript 回調
回調是作為參數傳遞給另一個函數的函數。
使用回調,您可以通過回調調用計算器函數(myCalculator
),并在計算完成后讓計算器函數運行回調:
實例
function myDisplayer(some) { document.getElementById("demo").innerHTML = some; } function myCalculator(num1, num2, myCallback) { let sum = num1 + num2; myCallback(sum); } myCalculator(5, 5, myDisplayer);
在上面的例子中, myDisplayer
是函數的名稱。
它作為參數傳遞給 myCalculator()
。
當您將函數作為參數傳遞時,請記住不要使用括號。
正確:myCalculator(5, 5, myDisplayer);
錯誤:myCalculator(5, 5, myDisplayer());
何時使用回調?
上面的例子并不是很令人興奮。
它們經過簡化了,為的是向您講解回調的語法。
回調真正閃光之處是異步函數,其中一個函數必須等待另一個函數(例如等待文件加載)。
下一章將介紹異步函數。