在我們了解什麼是非同步(
asynchronous
) JavaScript 之前,我們應該確保我們已經了解什麼是同步(
synchronous
) JavaScript 。在本章節會回顧我們在前篇文章所看到的一些資訊。
我們在前一個學習單元所看到的大部分功能都是同步的——當跑一段程式碼,瀏覽器會將執行結果盡快的回傳。我們來看看一則簡單的範例(
線上範例
,
原始碼
):
const btn = document.querySelector("button");
btn.addEventListener("click", () => {
alert("你點擊了我!");
let pElem = document.createElement("p");
pElem.textContent = "這是一段新加的文字。";
document.body.appendChild(pElem);
在這個程式區塊,指令是一行接著一行的執行:
我們先取得已經在 DOM 裡面的 <button> 元素的參考。
我們加入一個 click 事件監聽器,因此當按鈕被點擊時:
彈出 alert() 訊息。
當關閉警告訊息後,我們新增一個 <p> 元素。
給予一段文字內容。
最後,我們將文字段落嵌在文件本體( document body )上。
當正在執行每一個操作時,什麼事情都不會發生——渲染暫時停止。我們在上一篇文章有提到,這是因為 Javascript 是跑在一條單執行緒。主執行緒在同一時間只能做一件事情,直到目前操作完成為止其他的操作都會暫停。
所以在上面的範例中,直到警告視窗的確認按鈕被按下為止之前,文字段落都不會出現。你可以試試看底下的範例:
<button>點擊我</button>
使用 alert() 有個很重要的事情要記得,雖然用在證明是否為同步的阻塞操作非常有用,但非常不建議用在實際的應用程式上,使用體驗將會相當糟糕。