2016-08-16 49 views
0

我想了解JavaScript回調試圖解決什麼問題。從我到目前爲止閱讀,我們有事件和這些事件可以接受一個函數作爲參數(回調函數)JavaScript回調試圖解決什麼問題?

reference here

var img1 = document.querySelector('.img-1'); 

img1.addEventListener('load', function() { 
    // woo yey image loaded 
}); 

img1.addEventListener('error', function() { 
    // argh everything's broken 
}); 

所以我的猜測是,我們正在努力的問題解決的是我們想在事件發生後做更多的事情?

例如:

想象我有一個包含有一個按鈕,通過郵政編碼搜索積蓄輸入文本的系統,和一個按鈕,使用我的地理位置搜索商店。如果我點擊按鈕搜索一個輸入爲「12345」的商店,我也希望「回調」另一個可以清除地理位置的函數;因爲我不希望這干擾我的結果。

這有道理嗎?

+3

不,你的問題沒有意義。一般來說,最好閱讀一些關於JavaScript和事件的教程。 – Amit

+0

回調提供了將指令傳遞給系統其他部分的通用方法。 –

+0

異步性,回答你的主要問題。在這個例子中,回調函數只是告訴元素在各種情況下要做什麼的參數。 – Nate

回答

1

當代碼需要異步運行時,最經常使用回調函數。同步意味着「按順序」,所以異步意味着不按順序。異步事物的本質是它們的順序無法預測。 AJAX請求和事件就是這種情況,這是前端開發的兩個主要方面。我們無法知道服務器需要多長時間才能做出響應,而且我們無法知道用戶何時點擊按鈕並引發其他事件,更不知道他們將如何執行此操作。因此,我們使用回調來基本上說:「當這個異步操作完成時,執行X」,其中X是回調函數中的代碼。

+0

有趣的。謝謝你的解釋。當我更多地閱讀這個主題時,這是更有意義的。導致(聽起來像)承諾。 – Diego

0

JavaScript回調試圖解決什麼問題?

這是一個合理的和可回答的問題。說明有點混亂,我不確定這正是你要找的,但我會回答最初提出的問題。

Javascript不是多線程語言。在瀏覽器中,頁面將被鎖定,直到Javascript代碼執行完畢,並且NodeJS應用程序將無法提供任何其他請求或執行任何其他邏輯,直到代碼完成。

回調是解決這個問題的方法。它們允許開發人員指定在給定事件上運行的代碼,例如完成AJAX請求或(在Node中)返回數據的數據庫查詢。如果沒有回調,頁面/應用程序會鎖定,直到接收到請求,這會導致AJAX中的A(不對稱)。

延伸閱讀:

http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/

+0

感謝您的鏈接,我在昨天早些時候發佈這個問題後就登陸了它。 =) – Diego

0

正如其他人所指出的那樣,這是在異步調用中使用。我會盡量簡單地以一種非常簡單的方式來解釋它。 假設您正在調用以使用Ajax保存數據。實際的儲蓄可能需要一些時間(比如說1秒),但是在調用之後,控制流程會移到下一個語句。換句話說,你的代碼不會等待方法調用的響應。 (這是因爲它是異步的)。 但是,您可能想要向用戶顯示一條消息,指出記錄是否已成功保存或操作失敗。在這種情況下,您需要使用回調方法並檢查Ajax調用的返回值。 您無法預測回調方法何時發生,但是當發生時,回調中的代碼會被執行,您可以在其中添加邏輯以向用戶顯示正確的消息。

+0

感謝您抽出時間來解釋您的話是如何對我有用的。 – Diego

+0

非常歡迎。 – Sparrow