JavaScript 入門:同步與非同步? 為何需要非同步函式

更新 發佈閱讀 4 分鐘

上一篇文章【JavaScript 入門:什麼是一等函式、高階函式 (HOF) 與回呼函式 (Callback)】中,介紹了高階函式與回呼函式。上一篇的範例,回呼函式都是被立刻執行,今天要介紹的就是「不會立刻執行的函式」也就是非同步函式 Asynchronous function


同步與非同步

同步 Synchronous

同步的意思是:一件事做完才會做下一件事。例如:

console.log("A");
console.log("B");
console.log("C");

這段程式碼的執行順序會是:

A
B
C

非同步 Asynchronous

非同步的意思就與同步相反:某些事情可以先交代出去,之後再回頭處理。例如:

console.log("A");
setTimeout(()=>{
console.log("B");
},1000)
console.log("C");

這段程式的結果會是:

A
C
B

為什麼明明 setTimeout 寫在中間,卻在最後才印出 "B"?

我們來仔細看一下,setTimeout 接收了一個箭頭函式,並且在 1000 毫秒後執行被傳入的函式。setTimeout 就是上一篇介紹的「高階函式」,而被傳入等待執行的箭頭函式就是「回呼函式」。

如果忘記高階函式的概念可以回來看這篇文章:【JavaScript 入門:什麼是一等函式、高階函式 (HOF) 與回呼函式 (Callback)

在這個非同步函式的例子中,JS 並不會在原地等待一秒、執行完 console.log("B") 後再接著往下執行 console.log("C"),而是把「等待一秒」這個工作交給瀏覽器的計時機制處理,主程式先去執行 console.log("C"),等一秒過後才回頭執行 console.log("B")

所以說,

非同步函式就是:不會阻塞主程式運行,而是將需要等待的工作交出去,等結果準備好後再繼續處理的函式。

為何需要非同步函式

JavaScript 最初是設計跑在瀏覽器上的,如果每次執行下一個動作都要等前面的動作完成,可能會造成網頁不順暢。

舉例來說,如果沒有非同步,JS 在等待資料從資料庫或伺服器取撈回來的這段時間畫面會不能點擊、不能滾動,除了看起來像是當機外,使用體驗也會很差。因此 JS 利用非同步的設計,把需要等待的工作交出去,主程式可以繼續跑,等取得結果後再回頭處理。

非同步函式的目的是要避免耗時的任務(像是網路請求或定時器)阻塞執行緒,確保網頁在等待結果時仍能順暢地回應使用者的操作。

結論

同步與非同步的差異在於程式是否會「等待前一件事完成」才繼續往下執行

同步函式會依序完成程式碼,而非同步函式則會將需要等待的工作交出去,讓主程式可以先往下執行其他任務,等待結果完成後再回頭處理回呼函式。這樣的設計讓 JavaScript 即使在等待耗時任務的同時也可以保持畫面流暢與良好的使用者體驗。

下一篇文章,我們會進一步介紹 JavaScript 中的非同步函式怎麼實現,從 callback、promise 到 async/await 的概念逐步了解這些方法如何解決非同步函式的問題。

留言
avatar-img
Elaine 粼粼的林林總總
7會員
31內容數
不定期地分享程式/旅遊/學習/閱讀或各式各樣的文章,如果對我的分享有興趣,歡迎來找我玩~
2026/02/10
為什麼說 JavaScript 函式是一等公民 ? 本篇文章透過超簡單白話文範例,帶你理解一級函式、高階函式 (Higher-order function) 與回呼函式 (Callback function) 的定義與關係。學會如何將函式當作參數傳遞與回傳,並為接下來的非同步程式設計打下堅實基礎!
2026/02/10
為什麼說 JavaScript 函式是一等公民 ? 本篇文章透過超簡單白話文範例,帶你理解一級函式、高階函式 (Higher-order function) 與回呼函式 (Callback function) 的定義與關係。學會如何將函式當作參數傳遞與回傳,並為接下來的非同步程式設計打下堅實基礎!
2026/02/08
本文深入解析 JavaScript 中的函式 (Function),涵蓋函式宣告式、函式表達式(包括匿名函式)及 ES6 箭頭函式。解釋函式的提升、參數、回傳、作用域,並透過範例說明不同定義方式的語法與特性。
2026/02/08
本文深入解析 JavaScript 中的函式 (Function),涵蓋函式宣告式、函式表達式(包括匿名函式)及 ES6 箭頭函式。解釋函式的提升、參數、回傳、作用域,並透過範例說明不同定義方式的語法與特性。
2026/02/07
帶你理解 JavaScript 的 Hoisting 機制,包括 var、let、const 變數宣告及函式宣告與表達式的提升行為,以及暫時死區 (Temporal Dead Zone) 的概念。
Thumbnail
2026/02/07
帶你理解 JavaScript 的 Hoisting 機制,包括 var、let、const 變數宣告及函式宣告與表達式的提升行為,以及暫時死區 (Temporal Dead Zone) 的概念。
Thumbnail
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
練習目標 這篇是我的前端練習記錄,透過 CodePen 製作一個小功能:「點一下按鈕,就讓整個畫面換個背景色」。 這個練習適合剛開始學習 HTML、CSS、JavaScript 的人,幫助理解: 按鈕怎麼綁定事件 JavaScript 怎麼控制畫面樣式 如何產生隨機顏色 練習畫面預覽
Thumbnail
練習目標 這篇是我的前端練習記錄,透過 CodePen 製作一個小功能:「點一下按鈕,就讓整個畫面換個背景色」。 這個練習適合剛開始學習 HTML、CSS、JavaScript 的人,幫助理解: 按鈕怎麼綁定事件 JavaScript 怎麼控制畫面樣式 如何產生隨機顏色 練習畫面預覽
Thumbnail
這篇文章深入淺出地解釋 JavaScript 中表達式 (expression) 與陳述式 (statement) 的差異,並以 React 中 JSX 的應用為例,說明為何大括號 {} 內只能放入表達式。文章以類比人類語言的句子結構來幫助理解,並提供相關參考資料連結。
Thumbnail
這篇文章深入淺出地解釋 JavaScript 中表達式 (expression) 與陳述式 (statement) 的差異,並以 React 中 JSX 的應用為例,說明為何大括號 {} 內只能放入表達式。文章以類比人類語言的句子結構來幫助理解,並提供相關參考資料連結。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
本文介紹如何使用Vite建立前端開發初始檔案,並加入Tailwindcss的教學。透過指令和配置檔,讓你能快速建立個人專案的開發環境,並學習如何加入全域的Tailwindcss樣式。還有影片教學、資源連結和更多相關教學文章等,幫助你進一步學習。
Thumbnail
本文介紹如何使用Vite建立前端開發初始檔案,並加入Tailwindcss的教學。透過指令和配置檔,讓你能快速建立個人專案的開發環境,並學習如何加入全域的Tailwindcss樣式。還有影片教學、資源連結和更多相關教學文章等,幫助你進一步學習。
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
Thumbnail
這一集用最新的Vite工具去創建初始檔案。Vite用於創建和構建Web應用程序,具有快速的啟動時間、即時熱更新、小型體積、支持多種框架和可擴展性等優點。
Thumbnail
這一集用最新的Vite工具去創建初始檔案。Vite用於創建和構建Web應用程序,具有快速的啟動時間、即時熱更新、小型體積、支持多種框架和可擴展性等優點。
Thumbnail
隨著科技發展迅速,軟體職缺需求大增長,有些朋友對IT產業有興趣並想成為一位軟體工程師,但不知道從哪裡下手,透過傳統學校、培訓班或自學等不同方法,有多種學習路徑可以選擇。此外,還提供了一些額外資源教學連結,方便讀者進一步提升相關技能。
Thumbnail
隨著科技發展迅速,軟體職缺需求大增長,有些朋友對IT產業有興趣並想成為一位軟體工程師,但不知道從哪裡下手,透過傳統學校、培訓班或自學等不同方法,有多種學習路徑可以選擇。此外,還提供了一些額外資源教學連結,方便讀者進一步提升相關技能。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News