谈一谈Javascript中setTimeout
2016-12-03 22:31
239 查看
前段时间公司在开会的时候提到了Javascript里的setTimeout,同事们的讨论很有意思,决定和大家分享一下。
话不多说,上代码
很多人可能已经猜到了执行结果:
1.这是第一条日志
2.这是第二条日志
3.快去点击按钮吧 (延时1秒执行)
点击button 延时2秒输出“你点击了button!”
实际上执行过程是这样的的:
1.主线程执行代码块A ,发现有事件绑定,将事件注册到 Web API上
2.主线程执行代码块B ---->输出‘这是第一条日志’
3.主线程执行代码块C,发现有延时,将代码块C的内容拿出主线程,倒计时等待执行,倒计时完毕则进入回调执行队列
4.主线程执行代码块D(不被代码块C阻塞) --->输出‘这是第二条日志’
5.主线程全部执行完了,开始一个一个取回调执行队列的代码块来执行 --->输出'快去点击按钮!'
6.点击button时候,执行web api上之前注册的事件,发现是timeout,则倒计时等待,倒计时完毕则进入回调执行队列
7.主线程只要空闲,则执行回调执行队列 -->输出“你点击了button”
以上这些都可以使用一个很有趣的工具来可视化查看 可视化查看执行队列情况
![](http://img.blog.csdn.net/20161203230846500?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如有错误,请指出,谢谢
话不多说,上代码
//代码块A document.querySelector('button').onclick = function(){ / setTimeout(function f1() { console.log('你点击了button!'); }, 2000); } //代码块B console.log("这是第一条日志"); //代码块C setTimeout(function f2() { console.log("快去点击按钮吧"); }, 1000); //代码块D console.log("这是第二条日志");
很多人可能已经猜到了执行结果:
1.这是第一条日志
2.这是第二条日志
3.快去点击按钮吧 (延时1秒执行)
点击button 延时2秒输出“你点击了button!”
实际上执行过程是这样的的:
1.主线程执行代码块A ,发现有事件绑定,将事件注册到 Web API上
2.主线程执行代码块B ---->输出‘这是第一条日志’
3.主线程执行代码块C,发现有延时,将代码块C的内容拿出主线程,倒计时等待执行,倒计时完毕则进入回调执行队列
4.主线程执行代码块D(不被代码块C阻塞) --->输出‘这是第二条日志’
5.主线程全部执行完了,开始一个一个取回调执行队列的代码块来执行 --->输出'快去点击按钮!'
6.点击button时候,执行web api上之前注册的事件,发现是timeout,则倒计时等待,倒计时完毕则进入回调执行队列
7.主线程只要空闲,则执行回调执行队列 -->输出“你点击了button”
以上这些都可以使用一个很有趣的工具来可视化查看 可视化查看执行队列情况
如有错误,请指出,谢谢
相关文章推荐
- JavaScript同步、异步、回调执行顺序之经典闭包(setTimeout面试题分析)
- javascript 不停(setInterval)/延时(setTimeout)函数使用实例
- javascript中interval与setTimeOut的区别
- javascript网页特效——setTimeout和setInterval
- 理解JavaScript定时器:setTimeout和setInterval
- JavaScript同步、异步、回调执行顺序之经典闭包setTimeout面试题分析
- 谈一谈Javascript内存释放那点事
- JavaScript中setTimeout的那些事儿
- javascript的setTimeout超时调用
- javascript中SetInterval与setTimeout的定时器用法
- setTimeout的原理及在JavaScript线程执行队列中的位置
- Javascript异步编程之setTimeout与setInterval
- JavaScript的运行机制以及setTimeout(fn,0)
- javascript中setTimeout()函数
- javascript setTimeout 和 setInterval
- 从setTimeout谈JavaScript运行机制
- Javascript 中的定时器: setTimeout() 和 setInterval()
- javascript线程解释(setTimeout,setInterval你不知道的事)
- 对JavaScript调用堆栈和setTimeout用法的深入研究
- javascript中settimeout和setinterval函数的用法和实例