如何理解js单线程

js本质是单线程的,不能做到和java一样两个线程并发。

首先js分为同步异步代码。

另外,还有任务队列,可以把所有的异步任务加载到队列中。

js不能同时执行两个任务,本质还是单线程。

js中,所谓的 异步,有三种:

第一:鼠标键盘触发事件,例如click,等

第二:网络事件,例如onload等

第三:定时器,例如setTimeout等

因为这些任务的发生都不是在当下,而是过段时间以后再执行。因此时间不可控,你不能因为5秒后要执行一个函数,就让主线程闲置5秒什么都不干吧?所以你只能继续执行后续的同步代码。而当你单击鼠标或滚动窗口时,主线程可能正在执行其它代码,忙着呢!没工夫处理,因此,事件触发线程就负责来接收这个事件,并把要执行的任务暂时保存在任务队列当中。等主线程把手里的同步代码执行

这也就解释了为什么我们总把JS的异步函数叫做回调了,因为真的不是马上执行,而是回头再调的!

所以js单线程的本质就是控制主线程,等有其他操作需要操作的时候,把这个任务插入到主线程的队列中,本质就是单线程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值