再学Javascript之事件轮询机制和回调原理

js事件循环(轮询)机制
    1. js是单线程的 ---> 主线程
    2. 同步任务 || 异步任务
        - 同步: 1. 阻塞的 2. 同步是没有回调的
        - 异步: 1. 非阻塞 2. 异步有回调(用来通知当前异步任务执行的结果)
    3. 定时器真的准时吗?不一样
        - 特例:定时器任务的后边有运算量大的代码段
    4. 事件轮询机制:
        - 1. js任务都会在js的主线程执行
        - 2. 当开启一个异步任务的时候会交给对应的管理模块去管理
        - 3. 主线程继续执行后续的任务
        - 4. 管理模块接管的对应的回调,它会在恰当的时机将对应的回调放入callback queue中
        - 5. 当主线程上的所有同步任务执行完毕会通过 ‘轮询’的方式询问callback queue是否有可执行的回调
        - 6. 假如没有会反复询问
        - 7. 假如有可执行的回调将对应的回调钩到主线程执行
     5. 开发注意事项;
        - 不要在定时器任务之后放置运算量大的代码段;
        

 

 

1. 如何证明js执行是单线程的?
  * setTimeout()的回调函数是在主线程执行的
  * 定时器回调函数只有在运行栈中的代码全部执行完后才有可能执行
2. 为什么js要用单线程模式, 而不用多线程模式?
  * JavaScript的单线程,与它的用途有关。
  * 作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。
  * 这决定了它只能是单线程,否则会带来很复杂的同步问题

3. 代码的分类:
  * 初始化代码
  * 回调代码
4. js引擎执行代码的基本流程
  * 先执行初始化代码: 包含一些特别的代码
    * 设置定时器
    * 绑定监听
    * 发送ajax请求
  * 后面在某个时刻才会执行回调代码

 

  

  // js是单线程的,代码会阻塞
  /*
  * js代码分两种:
  *   同步代码
  *     1. 同步会阻塞后续代码的执行
  *     2. 同步没有回调
  *   异步代码
  *     1. 异步是非阻塞的
  *     2. 异步有回调
  *
  *
  * */
  setTimeout(function () {
    console.log('回调');
  }, 2000)
  console.log('程序开始执行');
  alert('---');
  console.log('-----------');
  console.log('程序执行结束');

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值