第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

前端面試必問之setTimeout

由于Javascript的单线程机制,所以实际上大部分前端程序员,或多或少都使用过setTimeout来解决一些问题,比如你在DOM还没渲染完就无意的操作到DOM,那这个时候你可能需要用setTimeout来将操作DOM的代码拿出主线程,等待DOM渲染完再去操作它。。。等等需要setTimeout的场景很多。


前段时间公司在开会的时候提到了Javascript里的setTimeout,同事们的讨论很有意思,决定和大家分享一下。

话不多说,上代码

//Javscript代码

//代码块A
document.querySelector('button').onclick = function(){    /
    setTimeout(function f1() {
        console.log('你点击了button!');
    }, 2000);
}

//代码块B
console.log("这是第一条日志");

//代码块C
setTimeout(function f2() {
    console.log("快去点击按钮吧");
}, 1000);

//代码块D
console.log("这是第二条日志");

很多人可能已经猜到了执行结果:
1.这是第一条日志
2.这是第二条日志
3.快去点击按钮吧 (延时1秒执行)
点击button 延时2秒输出“你点击了button!”


实际上执行过程是这样的的:
1.主线程执行代码块A ,发现有事件绑定,将事件注册到 Web API上
2.主线程执行代码块B ---->输出‘这是第一条日志’
3.主线程执行代码块C,发现有延时,将代码块C的内容拿出主线程,倒计时等待执行,倒计时完毕则进入回调执行队列
4.主线程执行代码块D(不被代码块C阻塞) --->输出‘这是第二条日志’
5.主线程全部执行完了,开始一个一个取回调执行队列的代码块来执行 --->输出'快去点击按钮!'
6.点击button时候,执行web api上之前注册的事件,发现是timeout,则倒计时等待,倒计时完毕则进入回调执行队列
7.主线程只要空闲,则执行回调执行队列 -->输出“你点击了button”


以上这些都可以使用一个很有趣的工具来可视化查看
点击进入可视化查看执行过程
图片描述

如有错误,请指出,谢谢!

點擊查看更多內容
7人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質文章

正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消