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


 

java中轮询查询 js 轮询_主线程

 


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('程序执行结束');