web前端 之运行机制

我们先来几道题了解一下体验一下运行机制

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

最后打印顺序:
1,2,3

我们来看看这是为什么
js是单线程的,同一时间只能做一件事,从上到下执行
任务队列:setTimeout是个异步任务,异步任务要挂起,继续执行同步任务,同步任务完成后才去执行异步任务,所以碰到setTimeout就挂起,先输出2,才返回去执行挂起任务,输出3

console.log('A');
while(true){

}
console.log('B')

输出:
A

这是个同步任务,遇到while后一直循环空,轮不到输出B

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

}

输出A

输出A以后,碰到setTimeout异步,挂起,去执行while同步任务,死循环

运行机制类

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

输出4,4,4,4

考察异步任务的放入时间和执行时间
for循环是同步任务,几毫秒之后循环执行结束,此时i是4,1s后把setTimeout放入异步任务中,然后输出的就是4

如何理解JS的单线程

一个时间之内js只能看一件事

什么是任务队列

分为同步任务和异步任务
(1)同步任务
按照顺利往下执行
(2)异步任务
异步任务挂起,同步执行完之后再去执行异步

Event Loop

事件循环:浏览器的搜索引擎遇到了setTimeout,识别了这是一个异步任务,不会把它放到运行栈里面,而是把它拿走,拿走之后,也不是立马把它放到异步任务队列中,同步任务执行完后,执行异步任务队列中,读出来有需要执行的任务后就把它放到运行栈中去执行,第一个异步任务就这样执行完后,再去异步任务栈中读取下一个任务放到运行栈中,如此循环

接下来我们来看什么时候会开启异步任务:
setTimeout和setInterval
DOM事件:一般都是用户在界面上操作的时候遇到卡顿基本上都是因为异步
ES6中的Promise
在这里插入图片描述

理解哪些语句会放入到异步队列中

见上

理解语句放入到异步队列的时机****

见上

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值