关于异步执行回调函数时间的问题

来源:17-3 异步和单线程-单线程

慕粉3732965

2017-07-03

http://szimg.mukewang.com/595a44250001541107290561.jpg

据我了解,虽然JS引擎是单线程执行程序的,但是浏览器是拥有多进程的,其中有类似于一个定时器进程来处理setTimeout()函数的,当setTimeout()到时间了,再把setTimeout()中的回调函数添加到任务队列中排队等待JS引擎在空闲的时候执行。所以我理解的setTimeout()中的这1s是加入到定时器进程中就开始计时倒数的(它应该是和JS引擎并行执行的倒计时),而不是像老师您在视频说的先把setTimeout()暂存起来,等轮到它执行的时候才开始倒数的。同理ajax等异步应该都有相应的浏览器进程作相应的处理。

这是我的个人理解,关于和您视频里讲的不同的理解带来的困惑,请老师解答下

写回答

1回答

双越

2017-07-03

“所以我理解的setTimeout()中的这1s是加入到定时器进程中就开始计时倒数的(它应该是和JS引擎并行执行的倒计时),而不是像老师您在视频说的先把setTimeout()暂存起来”——我近期看过一篇文章是这样说的,我觉得也有道理。

其实针对这一问题,我觉得也没必要过于纠结,还是实用为主,了解大体的执行过程即可。继续往下看,先把整个教程看完。

1
2
煦八羽
阿好像也不对……因为这样子的话感觉不能解释setTimeout里时间设置为0的情况了……因为按照我这个理解的话时间如果为零那就应该是马上执行而不会等其他任务执行后再执行了
2017-08-21
共2条回复

BAT大牛带你横扫初级前端JavaScript面试(第二版)

BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率

4268 学习 · 817 问题

查看课程