在第 3 部分中,我們討論了異步回調(diào)。 回顧一下,我們使用瀏覽器的幫助來給人一種 JavaScript 是異步的錯(cuò)覺。 setTimeout() 是瀏覽器全局對(duì)象的一部分,它允許我們產(chǎn)生同步 JavaScript 代碼是異步的錯(cuò)覺。 圖1。

阻塞代碼
假設(shè)我們有一個(gè)帶有單個(gè)按鈕的精美褲子網(wǎng)頁。我們永遠(yuǎn)不知道用戶何時(shí)會(huì)點(diǎn)擊該按鈕??赡苁乾F(xiàn)在,也可能是幾個(gè)小時(shí)后。我們只是不知道。因?yàn)?JavaScript 是同步的,這意味著頁面只是坐在那里等待按鈕被點(diǎn)擊。它掛起。無法繼續(xù)執(zhí)行下一行代碼 — 直到單擊按鈕。這就是所謂的阻塞代碼。在按下按鈕之前,一切都被阻止。
阻塞代碼:在其他代碼完成之前,代碼無法執(zhí)行
要觀察類似的阻塞行為,請(qǐng)?jiān)诳刂婆_(tái)中鍵入 alert()。圖 2 — alert() 方法是一種同步瀏覽器方法,它完全阻止所有內(nèi)容,直到用戶關(guān)閉對(duì)話框。從用戶的角度來看,阻塞代碼是可怕的,通常是最壞的情況。用戶不能對(duì)頁面做任何事情。它被封鎖了!他們不能滾動(dòng)、放大、單擊按鈕、發(fā)送消息、單擊喜歡。該頁面實(shí)際上已經(jīng)死了!

那么瀏覽器如何防止阻塞代碼呢?換句話說,它如何改進(jìn) JavaScript 的同步執(zhí)行模型?瀏覽器為我們提供了異步方法作為其 web-apis 的一部分。我們使用這些異步方法將事件偵聽器添加到按鈕或元素。事件偵聽器異步等待,直到單擊按鈕。然后它執(zhí)行一些代碼來響應(yīng)點(diǎn)擊。這樣,網(wǎng)頁就可以自由地做其他有用的事情了。有許多類型的事件偵聽器,例如在單擊鼠標(biāo)或加載頁面時(shí)觸發(fā)的事件。
讓我們看一個(gè)事件監(jiān)聽器的例子。將圖 3 中的代碼輸入 Web 瀏覽器的控制臺(tái),然后按 Enter?,F(xiàn)在單擊控制臺(tái)左側(cè)白色文檔內(nèi)的任意位置。觀察文檔顏色如何從白色變?yōu)榧t色。圖 4. 我的朋友們,這是異步 JavaScript 的作用。我們正在做的是監(jiān)聽文檔正文上的單擊事件,當(dāng)該事件發(fā)生時(shí),我們將文檔的 CSS 背景顏色屬性更改為紅色。此外,請(qǐng)注意瀏覽器如何將正文樣式異步更改為 <body style="background-color: red;"></body>。圖 5



現(xiàn)在我們對(duì)為什么阻塞代碼不好而異步代碼好的原因有了更好的理解,讓我們在第 5 部分中讓您稍微了解一下事件循環(huán)。 了解事件循環(huán)將使這些概念更加深入人心。 一旦你完全理解了事件循環(huán),你將為成為世界級(jí)的異步程序員奠定基礎(chǔ)。
圖 6 顯示了 JavaScript 事件循環(huán)的高級(jí)概述。

好了,這篇文章的內(nèi)容發(fā)貨聯(lián)盟就和大家分享到這里,如果大家網(wǎng)絡(luò)推廣引流創(chuàng)業(yè)感興趣,可以添加微信:80709525 備注:發(fā)貨聯(lián)盟引流學(xué)習(xí); 我拉你進(jìn)直播課程學(xué)習(xí)群,每周135晚上都是有實(shí)戰(zhàn)干貨的推廣引流技術(shù)課程免費(fèi)分享!