我想清楚瞭解javascript中的回調函數,以下是我的兩個問題,這些問題可能很基本,但我想這有助於澄清回調的概念:Javascript回調如何處理不同?
1.做所有回調函數異步執行,這意味着即使任務不是很慢,它們在單獨的進程上運行,然後放回到事件隊列中以便稍後執行?
2.在我的示例代碼中,有3個函數,一個簡單的2個數字的加法函數,一個調用add函數的普通函數和一個使用回調函數的函數,結果將在控制檯中相同現在,除了速記和匿名函數的優點之外,calculate()和calculate1()在執行過程中有何不同。
同時,我通過線程去 Why use callback in JavaScript, what are its advantages?其中解釋了爲什麼我們需要回調專爲異步編程,但我想知道所有的 如何回調簡單的或複合的處理,在我的代碼下面,我我使用簡單的回調函數並不是像setTimeOut或setInterval這樣的異步函數,它只是一個回調函數,那麼它將如何處理或執行的方式會有所不同。 謝謝!
function add(x,y){
return x + y;
}
function calculate(x,y,compute){
return compute(x,y);
}
function calculate1(x,y){
return add(x,y);
}
var a = calculate(5,4,function(x,y){return add(x,y)});
var b= calculate(5,4,add);
var c= calculate1(5,4);
console.log(a);
console.log(b);
console.log(c);
感謝您的解釋和我的第一個問題的答案是清楚的,回調沒有必要與 異步的事情,但關於我的第二個問題,我會嘗試進一步解釋。假設我把你的編碼片段,你叫settimeout in callCallback並刪除參數 中的回調cb並重寫setTimeout(function(){console.log('A'),10}並調用callCallback()而不使用匿名函數,儘管ouptput將相同,它會對javascript的處理方式產生任何影響嗎? –
不,在內部,它沒有任何區別。在這兩種情況下,都會將函數引用傳遞給'setTimeout',就是這樣。 – PeterMader