日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

前端读者 | 由setTimeout引发的JS引擎运行机制的研究

發布時間:2024/4/15 HTML 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前端读者 | 由setTimeout引发的JS引擎运行机制的研究 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文來自 @xiaoyuze88 鏈接:http://xiaoyuze88.github.io/

太久沒碰代碼了,那天想到關于循環調用setTimeout實現每隔一秒輸出遞增的數的那個問題,搞了搞,發現很多概念模糊了,在此總結下。

所謂的循環調用setTimeout實現遞增輸出,就是說用for循環10次,每隔一秒輸出一個從0~9的數。

不多說,直接上最終代碼再說,細節后面再談。

for (var i = 0; i < 10; i++) {//這里用閉包,為每一個i生成一個獨立的上下文環境,傳遞給里面的console.log,而不會受到setTimeout延時而影響(function (i) {`setTimeout`(function () {console.log(i);}, 1000 * i)})(i); }

這里主要的問題在:

  • 閉包的概念
  • 也是最終要的,關于setTimeout等函數的工作機制。
  • 首先閉包,這里就不多說了,在這里,閉包的作用就是給閉包內的函數生成一個不受外面環境干擾的上下文環境,由于js的作用域問題。

    如果這里不用閉包,寫成諸如:

    for (var i = 0; i < 10; i++) {`setTimeout`(function () {console.log(i);}, i * 1000); }

    會發現,每隔一秒鐘,輸出一個10。

    這是由于這一個for循環的執行,瞬間就完成了,也就是說,瞬間注冊了10個延時執行的函數,每一個隔一秒鐘執行。

    當注冊的時間點到來,開始執行setTimeout中的語句,由于定義域的問題,此時console.log(i)的這個i指向的是已經到達10的for循環中的i,這就是為什么要用閉包來給setTimeout設置獨立的上下文環境,而避免需要訪問i時訪問到了外面的變量。

    另外,如果細想一下,會發現setTimeout的工作過程多少讓人有點迷惑,到底setTimeout等延時類函數在瀏覽器中是如何運作的?這就牽扯到下一個問題,關于瀏覽器中是如果運作的問題。

    瀏覽器中,JS引擎是單線程的,假設一個瀏覽器中有三個常駐線程,既JS引擎線程、渲染線程、事件觸發線程,還有處理完即結束的線程如AJAX異步請求。

    其中,JS線程與渲染線程是互斥的,這是為了避免JS控制DOM時與頁面渲染發生沖突。而對于JS線程,它是由事件驅動的,由于單線程,所有任務依隊列排序。如果頁面上觸發了事件,如onclick=function(){}、或者由setTimeout添加了一個函數、ajax請求返回的事件等,所有新添加的任務位于隊尾等待處理。

    由于是單線程,如果線程被阻塞,如while(true){}死循環,則一切新添加的任務都將被阻塞。

    由上面所述,就可以理解為什么setTimeout或setInterval設置的延時事件并不是真是函數處理的延時時間,既setTimout(code,1000)并不是一定會在1秒后處理,這段代碼發生的僅僅是在1秒后,將待處理函數排與js任務隊列末尾。

    轉載于:https://www.cnblogs.com/chenrf/p/10106433.html

    總結

    以上是生活随笔為你收集整理的前端读者 | 由setTimeout引发的JS引擎运行机制的研究的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 影音先锋中文字幕人妻 | 免费男女乱淫真视频免费播放 | 在线a毛片 | 亚洲天堂av在线免费观看 | 国产精品久久久久久久久久久久久久久久 | 狠狠插狠狠操 | 国产精品高潮呻吟久久av野狼 | 97视频在线看 | 午夜久久久久久久久久久 | 农村搞破鞋视频大全 | 国产一级免费大片 | 涩涩涩av | 欧美日韩精品综合 | 国内自拍在线观看 | 久久久蜜桃 | 国产成人精品视频一区二区 | av永久免费网站 | 日日操视频 | 喷潮在线观看 | 欧美射射 | 少妇无码一区二区三区免费 | 一级全黄裸体免费观看视频 | 日本三级吃奶头添泬 | 99热97| 日韩福利视频一区 | 91精品国产综合久久香蕉 | 日韩制服诱惑 | 致命魔术电影高清在线观看 | 男人的天堂在线 | 一级做a爱片久久毛片 | 欧美久久久久久久 | 狠狠操在线播放 | 精品国产一区一区二区三亚瑟 | 久久久xxx | 久久久69| 色狠狠av老熟女 | 日韩在线观看不卡 | 亚洲欧美高清 | 成人av手机在线 | 久久久久亚洲av成人无码电影 | avxx| 草久久| 精品国产免费看 | 亚洲精品一区中文字幕乱码 | h成人在线 | 少妇高潮惨叫久久久久 | a级一片 | 日韩有码专区 | x88av视频 | 日本精品久久久久中文字幕 | 水果视频污 | 亚洲视频播放 | 免费看黄色一级大片 | 亚洲字幕在线观看 | 免费看60分钟黄视频 | 高清日韩一区二区 | 欧美一级做性受免费大片免费 | 日韩伦理在线视频 | 亚洲偷拍一区 | 伊人春色av | 在线免费黄色片 | 欧美日韩在线一区二区三区 | 精品裸体舞一区二区三区 | 亚洲色成人www永久网站 | 福利在线播放 | 91视频播放器 | 国产视频一区二区在线观看 | 精品动漫一区二区三区的观看方式 | 超碰香蕉 | 久久二 | 另类一区二区三区 | 久久中文网 | 亚洲成人网在线播放 | 免费黄色av网址 | 免费一区二区在线观看 | 最新国产视频 | 日韩在线不卡 | 国产人人干 | 亚洲在线视频免费观看 | 国产黄色精品网站 | 少妇在线| 小伸进喷水网站 | 成人动漫免费在线观看 | 少妇精品亚洲一区二区成人 | 刘亦菲毛片一区二区三区 | 欧美日韩久久久久久 | 欧美影院在线观看 | av漫画在线观看 | 一区精品二区国产 | 少妇粉嫩小泬喷水视频www | 一区二区不卡免费视频 | 午夜久久久久久噜噜噜噜 | 免费在线观看黄色av | 亚洲精品一区二区18漫画 | 九九九在线视频 | yw在线观看 | 国产99久久久 | 性xxxx搡xxxxx搡欧美 | 国产第八页 |