网页设计可以进怎样的公司/天津seo渠道代理
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('程序执行结束');