setTimeout机制的思考

我一直在思考为什么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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值