當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript事件循环机制EventLoop
生活随笔
收集整理的這篇文章主要介紹了
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Laravel - Auth验证流程以及
- 下一篇: 自定义SpringBoot项目的Mave