1.FNͨѶԴ?通讯?
FNͨѶԴ??
在 zepto 源码中,$.fn 对象有个 ready 函数,源码其中有这样一句 setTimeout(fn,通讯0);
时间设为 0 ,就是源码计划表源码要立即执行,那为什么还要特意将 fn 套到 setTimeout 里面呢?
一、通讯线程
1、源码浏览器的通讯内核是多线程的,它们在内核控制下相互配合以保持同步,源码一个浏览器通常由以下常驻线程组成:GUI 渲染线程,通讯javascript 引擎线程,源码浏览器事件触发线程,通讯zxing库源码定时触发器线程,源码异步 http 请求线程。通讯
2、源码javascript 是通讯单线程的,同一个时间只能做一件事。mybits源码分析
二、任务队列(消息队列)
同步函数:如果在函数A返回的时候,调用者就能够得到预期结果(即拿到了预期的返回值或者看到了预期的效果),那么这个函数就是同步的。
异步函数即如果在函数A返回的oecms交友源码时候,调用者还不能够得到预期结果,而是需要在将来通过一定的手段得到,那么这个函数就是异步的。
三、setTimeout(fn,拆分游戏源码 0) 的作用
调用 setTimeout 函数会在一个时间段过去后在队列中添加一个消息。这个时间段作为函数的第二个参数被传入。如果队列中没有其它消息,消息会被马上处理。但是,如果有其它消息,setTimeout 消息必须等待其它消息处理完。因此第二个参数仅仅表示最少的时间,而非确切的时间。
零延迟 (Zero delay) 并不是意味着回调会立即执行。在零延迟调用 setTimeout 时,其并不是过了给定的时间间隔后就马上执行回调函数。其等待的时间基于队列里正在等待的消息数量。也就是说,setTimeout()只是将事件插入了任务队列,必须等到当前代码(执行栈)执行完,主线程才会去执行它指定的回调函数。要是当前代码耗时很长,有可能要等很久,所以并没有办法保证回调函数一定会在setTimeout()指定的时间执行。