setTimeout机制的思考

来源:互联网 发布:网络虚拟手机号发短信 编辑:程序博客网 时间:2024/06/09 20:24

我一直在思考为什么js是单线程的,今天看到了阮一峰大神的解释,一下子想通了,js是用来互动的,如果是多线程,这个时候如果多个线程同时对一个dom操作怎么办,不过我记得我在一本书上看过,在操作系统中也是有着多线程控制的,进行权限管理,但是js为什么没有做我也说不明白,说回来setTimeout。这个东西为什么出现,还是为了解决js单线程问题,js是单线程的但是浏览器是多线程的,这就会出现一个问题,那就是虽然js可以等一个时间很长的函数执行,但是浏览器不能等,用户更不可能等,这个时候setTImeout就出现了,刚开始的时候我以为就是说一个函数执行完,等多少秒就开始进行setTime的函数,这么说对也不对,为什么对,js是单线程的当任务多的时候他就会将所有的任务推入队列一个一个执行,如果setTimeout前面他没有函数执行了,那么就轮到他执行了,要是还有就不行了,简而言之,setTimeout的延时是延时一定时间将其推入队列等待执行,而且还不是当前函数执行完毕就会立即执行,setTimeout会等待级别更高的函数都执行完,简而言之setTimeout是个后娘养的,他不受疼爱,这会出现一个很大的问题,我们在for循环中如果用setTimeout进行打印,那么他不是一个个的打出,而是等待一段时间一次性的打印出来。这也就在我今天写颜色变化函数的时候给了我很大的困扰,最后抄袭了一位大神才得以解决,

阮一峰大神关于js运行机制的文章:http://www.ruanyifeng.com/blog/2014/10/event-loop.html;

关于setTImeout运行机制的文章:http://www.cnblogs.com/zichi/p/4604053.html,

http://www.cnblogs.com/dojo-lzz/p/4606448.html

0 0
原创粉丝点击