JS运行机制(异步和单线程)

JS的单线程的概念

  1. JS是单线程的编程语言,也就是说同一时间只能做一件事,这样能提高效率;
  2. 任务队列:同步任务(console.log())、异步任务(setTimeout())挂起,优先处理同步任务,再去响应异步任务;

案例

例1:

console.log(1);
setTimeout(function(){
	console.log(2);
},0);//挂起
console.log(3);

运行结果:132
原因:在所有同步任务执行完之前,任何的异步任务是不会执行的

例2:

console.log('A');
setTimeout(function () {
    console.log('B');
}, 0);
while (1) {
}

运行结果:A
原因:由于同步任务while循环没有执行完成,导致一直无法处理异步任务setTimeout();

例3:

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

运行结果:4444
原因:由于for循环是一个同步任务,而setTimeout()是异步方法,所以for循环结束后才会执行异步任务setTimeout(),当for循环结束后是i的值为4,所以这个时候执行的异步任务中的i为4;
异步队列执行的时间,事件循环

1. 什么是任务队列(消息队列)

任务队列中分为两种任务: 同步任务和异步任务;
同步任务: 指在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
异步任务: 指不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

2. 什么是Event Loop

概念: 主线程从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)。只要主线程空了,就会去读取"任务队列",这就是JavaScript的运行机制。
在这里插入图片描述
哪些语句会放入异步任务队列及放入时机
setTimeout和setInterval
DOM事件
ES6中的Promise

总结:

理解JS的单线程的概念
理解任务队列
理解Event Loop
理解哪些语句会放入异步任务队列
理解语句放入异步任务队列的时机

80% 应聘者都不及格的 JS 面试题【参考链接】https://juejin.im/post/58cf180b0ce4630057d6727c
深入浅出Javascript事件循环机制(上)【参考链接】https://zhuanlan.zhihu.com/p/26229293
彻底弄懂 JavaScript 执行机制【参考链接】https://www.jb51.net/article/149358.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值