簡體   English   中英

JavaScript 是否有一個事件監聽器隊列,不斷檢查是否有它們?

[英]Does JavaScript have a queue of event listeners that constantly checked if there are any of them?

我正在學習 JavaScript 並在 Chrome 開發工具或 JavaScript 控制台上添加了一些 JavaScript 代碼,以延遲或阻止在幾秒鍾內單擊網站上的任何按鈕。 它按預期工作。 但是,該點擊會在幾秒鍾后自動觸發。 為什么會這樣? JavaScript 是否有一個事件偵聽器隊列,不斷檢查是否有任何事件偵聽器並對這些事件采取行動?

function hang(secs) {
    const doneAt = Date.now() + (secs * 1000)
    while (Date.now() < doneAt) {}
}

hang(10)

您的while循環將阻止瀏覽器在請求的時間內執行的所有其他操作。 這很可能會觸發瀏覽器“腳本花費太多時間”的警告彈出窗口。 這不是您在 JavaScript 中實現延遲的方式。 如果您想延遲對用戶交互的反應,請使用計時器機制( setTimeout()等)。

具體到您的問題,事件實際上確實在排隊,但沒有什么是“不斷檢查”它們; 一個事件發生了,這個簡單的事實導致一個動作被放入隊列。 當您的 CPU 燃燒循環正在運行時,不會發生任何事件處理程序分派。 function 完成后,將分派事件處理程序。 JavaScript 環境是單線程的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM