我對回調的理解有點問題。我在過去的2天裏讀了很多,我知道的是以下內容(如果我錯了,請糾正我):Javascript - 回調的優點
JavaScript是單線程語言,您可以編程同步和異步。 同步表示每個語句在執行之前等待先前的語句完成。這可能會導致麻煩,因爲例如,如果連接到數據庫需要很多時間,則前一個之後的語句必須等待。 最後這是非常糟糕的,這就是爲什麼在Javascript中編程異步更好,因爲異步代碼不必等待,代碼可以繼續運行,用戶不必等待。
要編程異步回調函數(高階函數)是必要的。
現在我已經嘗試了很多的教程的一個小例子程序等
function testCallback(a,callback){
console.log('1.function and given parameter: '+a);
callback(10);
}
testCallback(5 , function(x){
console.log("2.function and given parameter of 1. function: "+x);
});
是嗎?輸出:
1.function and given parameter: 5
2.function and given parameter of 1. function: 10
我不明白,有什麼優點是這個代碼,因爲我認爲仍然可能導致陷入困境?如果「的console.log( '1.功能和....')有問題,回調(10)函數將甚至停止或不?
感謝您的幫助!
「如果......有問題,回調函數會停下來?」 - 好的,如果代碼有問題並且沒有調用回調,那麼回調就不會被調用。但這並不是回調的目的,它們不是爲了繞過錯誤的代碼而工作的。正如你所說,Javascript是單線程的。如果你正在等待數據庫,那麼整個線程被阻塞,沒有其他事情可以發生。所以數據庫代碼通常是異步的,發生在後臺的某處,讓JS線程去做其他事情。準備就緒後,它會調用回調並在JS線程上繼續。這就是目的 – deceze
回調不是構建異步代碼的唯一方式,它們只是提供了一種可能性,歷史上是第一種,也許是目前最廣泛採用的方式。然而,還有其他方法,即承諾和異步/等待周圍的糖。 –