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

歡迎訪問 生活随笔!

生活随笔

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

javascript

javascript事件循环机制EventLoop

發(fā)布時間:2025/3/19 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript事件循环机制EventLoop 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

面試題:1到10 ,每隔一秒輸出一個

自執(zhí)行函數(shù)for (var i=1; i<=10; i++) {(function (i) {setTimeout(() => console.log(i), 1000*i)})(i)} 復(fù)制代碼塊級作用域for (let i=1; i<=10; i++) {(function () {setTimeout(() => console.log(i), 1000*i)})()} 復(fù)制代碼

其實面試官是想問js的同步編程以及異步編程

JS中的同步編程和異步編程

JS是單線程的(一個任務(wù)只能執(zhí)行一次,當前任務(wù)沒有完成,下面的任務(wù)是不會進行處理的)

同步編程(sync:synchronize):任務(wù)是按照一件件的完成的,當前任務(wù)沒有完成,下面的任務(wù)不進行處理

異步編程(async::當前任務(wù)在等待執(zhí)行的時候,我們不去執(zhí)行,繼續(xù)完成下面的任務(wù),當下面的任務(wù)完成后,而是也到達等待的時間了,采取執(zhí)行當前的任務(wù)

異步編程

> 定時器是異步編程的> 所有的事件綁定也是異步編程> AJAX中有異步編程> 有些人把回調(diào)函數(shù)當做異步編程(理解起來比較牽強)> 其余的都是同步編程 復(fù)制代碼

同步編程個異步編程的核心原理

1、JS 中有兩個任務(wù)隊列(存放任務(wù)列表的空間就是任務(wù)隊列)

1)主任務(wù)隊列:同步執(zhí)行任務(wù)(從上到下依次執(zhí)行)

2)等待任務(wù)隊列:異步執(zhí)行任務(wù)

setTimeout(function () {console.log(1); }, 50);setTimeout(function () {console.log(2); }, 10);setTimeout(function () {console.log(3); }, 30);for (var i = 0; i < 100000000; i++) {//=>需要600MS~700MS } console.log(4); //輸出4,2,3,1,先執(zhí)行循環(huán),因為定時器異步編程,先放到等待隊列,然后瀏覽器取執(zhí)行循環(huán),執(zhí)行完事再去執(zhí)行定時器,按照時間先后順序執(zhí)行復(fù)制代碼for (var i = 1; i <= 5; i++) {setTimeout(function () {console.log(i);//輸出5次6}, (5 - i) * 10); }//=>[主任務(wù)隊列] // i=1 創(chuàng)建一個定時器 // i=2 創(chuàng)建一個定時器 // i=3 創(chuàng)建一個定時器 // i=4 創(chuàng)建一個定時器 // i=5 創(chuàng)建一個定時器 // i=6 循環(huán)結(jié)束,此時主任務(wù)隊列中的方法都已經(jīng)執(zhí)行完成了,到等待任務(wù)隊列中找先到時間的方法,拿到主任務(wù)隊列中執(zhí)行 // 執(zhí)行它 function () {console.log(i);},i不是自己私有的,找全局下的i(此時的i已經(jīng)是6了)//=>[等待任務(wù)隊列] // 40MS后執(zhí)行某方法 // 30MS后執(zhí)行某方法 // 20MS后執(zhí)行某方法 // 10MS后執(zhí)行某方法 // 0MS后執(zhí)行某方法復(fù)制代碼 for (var i = 0; i <oList.length; i++) {oList[i].onclick=function () {alert(i);} }for (var i = 1; i <= 5; i++) {~function (i) {setTimeout(function () {console.log(i);}, (5 - i) * 10);}(i); } 復(fù)制代碼for ( i = 1; i <= 5; i++) {~function(i){ setTimeout(function () {console.log(i);//依次輸出5,4,3,2,1}, (5 - i) * 10);}(i) } 復(fù)制代碼

轉(zhuǎn)載于:https://juejin.im/post/5c6fbbcb51882562e7480f1d

總結(jié)

以上是生活随笔為你收集整理的javascript事件循环机制EventLoop的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。