JavaScript异步和单线程经典的例子setTimeout

    这篇文章主要讲一下js的异步和单线程以及一个经典例子。
    JavaScript是单线程和异步执行的。单线程的意思是一次只干一件事,所有要执行的任务都是排队一个个来。异步和同步是相对的,同步是说执行任务时要阻塞,上一个任务没有执行完,下一个任务不会执行。而异步会有所不同,当上一个任务需要等待时,会把该任务暂存起来,不会立即执行,等到所有程序执行完,处于空闲状态时,会立即查看有没有暂存的任务执行。
    所以,我们知道当需要等待时就会发生异步。等待的场景主要有:
        + 定时任务:setTimeout, setInterval
        + 网络请求:ajax请求,图片img加载等
        + 绑定事件
    下面讲一个关于setTimeout的经典例子。

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

    上面程序运行的结果是1、3、2。如下图
这里写图片描述
现在分析一下程序的运行过程。

  1. 执行第一行,打印出1
  2. 执行setTimeout后,传入的函数会被暂存起来,不会立即执行(单线程的原因,不会同时干两件事)
  3. 执行第五行打印3
  4. 这时,所有程序执行完毕, 然后立即查看暂存的任务,这里暂存的任务是传入setTimeout的函数
  5. 发现setTimeout中的函数无需等待,就立即执行,打印2
    所以可以知道,执行结果是1、3、2。

这篇文章就到这了,记录自己的学习心得,讲得比较简单,如有错误,恳请指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值