忽然笑
2021-11-25 19:40:00
據(jù)說回調(diào)通過將回調(diào)函數(shù)的值(其函數(shù)定義)傳遞給“高階”函數(shù)的參數(shù),在該參數(shù)中傳入并執(zhí)行,從而為高階函數(shù)添加功能。似乎我們可以通過從另一個執(zhí)行函數(shù)內(nèi)部調(diào)用外部函數(shù)來完成同樣的事情。以下內(nèi)容更好地說明了我想說的內(nèi)容。// ************************ 使用回調(diào) ************************ ****************************function A() { // this is the callback function return 'hello';};function B(callback) { // this is considered a 'higher-order' function because it takes a // function definition as a parameter. the function definition of A // -- taken from A in Global memory -- is assigned to callback var output = callback(); // we call callback and run it // the value of callback, is assigned to the variable output console.log(output); console.log("goodbye")};B(A); // logs 'hello' 'goodbye'// ******* 將上述與從另一個函數(shù)內(nèi)部調(diào)用外部函數(shù)進行比較 *****function A() { return 'hello';};function B() { var output = A(); // we call function A, from inside function B, // the value returned by A, is assigned to a variable inside B console.log(output); console.log("goodbye")};B(); // logs 'hello' 'goodbye'雖然兩者在返回值方面沒有區(qū)別,但它們的執(zhí)行方式卻有所不同?;卣{(diào)函數(shù)接受 A 的函數(shù)定義并將其附加到一個名為回調(diào)的新名稱?;卣{(diào)被執(zhí)行,并在回調(diào)的本地執(zhí)行上下文中運行。將此與從 B 內(nèi)部調(diào)用 A 時發(fā)生的情況進行比較,A 在其自己的本地執(zhí)行上下文中執(zhí)行。也許這個例子太簡單了,看不出這兩個之間的差異會幫助我理解什么時候使用一個而不是另一個。
1 回答

小唯快跑啊
TA貢獻1863條經(jīng)驗 獲得超2個贊
想象一下,B有時會傳遞A,但有時會傳遞名為C. 如果B直接調(diào)用一個函數(shù),它只能調(diào)用那個函數(shù)。但是如果它傳遞了一個函數(shù)來調(diào)用,它可以調(diào)用它傳遞的任何函數(shù):
function A() {
return 'hello';
};
function C() {
return 'Привет';
};
function B(callback) {
var output = callback();
console.log(output);
console.log("goodbye")
};
B(A);
// => 'hello'
// => 'goodbye'
B(C);
// => 'Привет'
// => 'goodbye'
如果沒有回調(diào),你就無法做到這一點。
真的,這就是為什么論證通常是強大的。將不同的參數(shù)傳遞給函數(shù)允許代碼以沒有它們(或等效機制)的方式動態(tài)化。
添加回答
舉報
0/150
提交
取消