開篇
我們都知道JavaScript是單線程的語言,它不像大多數語言可以開啟多線程,當處理一些阻塞并且很慢的操作時,它可以通過多線程使操作變成異步(例如讀取文件等IO操作)。其實JavaScript也有同步異步的區(qū)分。首先來看一下同步與異步的區(qū)別
// 同步
alert('阻塞中...')
console.log('待執(zhí)行')
// 異步
setTimeout(() => {
alert('阻塞中...')
}, 1000)
console.log('待執(zhí)行')
image
image
從上面?zhèn)z張圖可以看到區(qū)別,alert()同步會阻塞應用,導致下面代碼只好等待其完成,而setTimeout異步則不需要等待,log可以先執(zhí)行。那剛才說JavaScript沒有多線程,它又是如何實現異步操作的呢,這里就要說到事件循環(huán)啦。