1. 程式人生 > 其它 >JavaScript中的非同步、同步和回撥函式

JavaScript中的非同步、同步和回撥函式

非同步(Asynchronous, async)是與同步(Synchronous, sync)相對的概念。

在我們學習的傳統單執行緒程式設計中,程式的執行是同步的(同步不意味著所有步驟同時執行,而是指步驟在一個控制流序列中按順序執行)。而非同步的概念則是不保證同步的概念,也就是說,一個非同步過程的執行將不再與原有的序列有順序關係。

簡單來理解就是:同步按你的程式碼順序執行,非同步不按照程式碼順序執行,非同步的執行效率更高。

以上是關於非同步的概念的解釋,接下來我們通俗地解釋一下非同步:非同步就是從主執行緒發射一個子執行緒來完成任務。

但是子執行緒有一個侷限:一旦發射了以後就會與主執行緒失去同步,我們無法確定它的結束,如果結束之後需要處理一些事情,比如處理來自伺服器的資訊,我們是無法將它合併到主執行緒中去的。

為了解決這個問題,JavaScript 中的非同步操作函式往往通過回撥函式來實現非同步任務的結果處理。

回撥函式

回撥函式就是一個函式,它是在我們啟動一個非同步任務的時候就告訴它:等你完成了這個任務之後要幹什麼。這樣一來主執行緒幾乎不用關心非同步任務的狀態了,他自己會善始善終。

function print() {
   alert("hahahah")
}
setTimeout(print, 1000)

print就是一個回撥函式,也可以寫成如下形式:

setTimeout(function() {
  alert("hahaha")
},1000)

文章來源:https://www.runoob.com/js/js-async.html