setTimeout,延迟一段时间执行代码。

setTimeout(func,0),这代码的作用并不是简单地和直接调用func一个效果:

  1:动态往DOM树中插入元素,然后立刻操作这个元素(选择文本框文本,改变select的index)。

  2:因为浏览器单线程,js引擎和渲染引擎必须是顺序执行。(比如点击一个按钮,浏览器会先改变按钮的状态(重绘),然后才执行js(js引擎))

  3:所以向DOM插入元素再立刻操作这个DOM,很可能这DOM还没重绘完成,因此操作无效。

  4:所以setTimeout(func,0) 可以解决(setTimeout 会等重绘完成再执行代码。)

---------------以上部分是结果,下边是原理----------------------------------------------------------------------

  深入思考:

  5:setTimeout(func,0)是延迟0ms执行,也就是立即执行,为什么还是在重绘之后呢。重绘肯定超过0ms啊。

  6:因为Javascript的单线程异步模式。

  7:参考John Resig 的 《how javascript Timers work

-------------------以下是对此文章理解-----------------------------------------------------------------------------

  

--蓝色的为js块。

--右边的数字是事件。

--左边数字是时间轴。

--问题是浏览器的判断。

步骤解析:

  1:第一个js块中,两个10ms的timer被初始化(一个setTimeout 一个setInterval),鼠标点击了(鼠标点击事件的事件处理函数也要排队等第一个js块执行完再处理),

  2:第一个js块执行完,浏览器问谁在等执行?(鼠标点击事件和timer)

  3:执行鼠标点击事件,timer继续等待。

  4:在执行鼠标点击事件时,10ms的interval触发了(毫无例外的继续排队,想立即执行不存在的)

  5:事件处理函数执行完毕,timer开始执行,这时候interval 又触发了。。(这次的interval被抛弃了dropped)

  6:timer执行完毕,第一个interval执行,然后第三个interval触发,在其自身执行过程中,自身也可以被触发。

  7:最后没什么排队的,所有interval立刻执行。

然后setTimeout 和 setInterval的区别

 setTimeout(function(){
setTimeout(arguments.callee,10);
},10); setInterval(function(){
},10);

这两个代码看着效果一样,其实区别很大。setTimeout总是会在其回调函数执行后延迟10ms(或者更多,不会更少)。但是setInterval总是10ms执行一次而不管它的回调函数执行多久。

如果intervals的回调执行时间比你给的delay还要长,那么他们会连在一起执行。

----------------------------------下边说说settimeout中的this---------------------------------------------------

setTimeout的this被指向全局作用域

 var 0 = {
a:"a",
b: function(){
setTimeout(function(){
console.log(this.a);
},1000);
}
}
o.b();// undefined

解决办法是:

 var o={
a:"a",
b:function(){
var that = this;
setTimeout(function(){
console.log(that.a);
},1000);
}
}

setTimeout 的理解的更多相关文章

  1. JavaScript下的setTimeout(fn,0)意味着什么?

    近期在研究异步编程的我对于setTimeout之类的东西异常敏感.在SegmentFault上看到了一个问题<关于SetTimeout时间设为0时>:提问者读了一篇文章,原文解释setTi ...

  2. 定时器相关 setTimeout setInterval 函数节流

    这个问题也是在参加百度的前端技术学院中遇到的 任务中需要用js实现动画  导师给的评价中setInterval会导致bug 当时不理解   下面把自己学习的过程分享出来 再次理解单线程   老是说js ...

  3. setTimeOut和闭包

    掘金上看到一个setTimeout与循环闭包的思考题.拿过来看了下,一方面了解settimeout的运行机制,还有就是js闭包的特性.关于闭包,有如下解释: 在这里写一点我对闭包的理解.理解闭包的关键 ...

  4. JavaScript运行机制与setTimeout

    前段时间,老板交给了我一个任务:通过setTimeout来延后网站某些复杂资源的请求.正好借此机会,将JavaScript运行机制和setTimeout重新认真思考一遍,并将我对它们的理解整理如下. ...

  5. 前端基础进阶(六)-大厂面试题问题:循环闭包与setTimeout

    我在上一篇闭包的文章中留下了一个关于setTimeout与循环闭包的思考题. 利用闭包,修改下面的代码,让循环输出的结果依次为1, 2, 3, 4, 5 for (var i = 1; i <= ...

  6. 附件1:setTimeout与闭包

    我在详细图解作用域链与闭包一文中的结尾留下了一个关于setTimeout与循环闭包的思考题. 利用闭包,修改下面的代码,让循环输出的结果依次为1, 2, 3, 4, 5 for (var i=1; i ...

  7. call,apply,bind

    一.call&apply call, apply都属于Function.prototype的方法,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法 ...

  8. javascript中的一些核心知识点以及需要注意的地方

    前言 近期杂事甚多,这些事情的积累对知识体系的提升有好处,但是却不能整理出来,也整理不出来 比如说我最近研究的Hybrid在线联调方案便过于依赖于业务,就算分享也不会有人读懂,若是抽一点来分享又意义不 ...

  9. JS异步阻塞的迷思

    还是百度前端技术学院的“任务十九”可视化排序算法的题,在写出快速排序算法之后,要求用动画的形式把这个排序过程呈现出来.排序过程在CPU里不过是瞬间的事,但要转换成“缓慢的”动画效果给人类看,就不得不把 ...

随机推荐

  1. Java 之 Servlet 体系结构

    Servlet 的体系结构 体系结构示意图: 1.Servlet 接口 如果直接实现这个接口,需要重写里面所有的方法,但是只需要使用 service() 方法,其他的不常用. 2.GenericSer ...

  2. mybatis异常:nested exception is org.apache.ibatis.builder.BuilderException: Error resolving JdbcType

    异常详细 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.Builde ...

  3. Swift 4 中的泛型

    作为Swift中最重要的特性之一,泛型使用起来很巧妙.很多人都不太能理解并使用泛型,特别是应用开发者.泛型最适合libraries, frameworks, and SDKs的开发.在这篇文章中,我将 ...

  4. [破解版]Unity3d引擎最新稳定版本4.5.5下载(官方最新稳定版本)

    来源:http://www.unitymanual.com/thread-28912-1-1.html unity4.5.5 Mac版下载地址:http://pan.baidu.com/s/1hqzi ...

  5. 代替for-in 遍历对象

    object.keys() object.getOwnPropertyName()

  6. ASP.NET 取得 Request URL 的各个部分和通过ASP.NET获取URL地址的方法

    网址:http://localhost:1897/News/Press/Content.aspx/123?id=1#toc Request.ApplicationPath / Request.Phys ...

  7. The Essential Burp Suite

    OK   we have download teh burp suite .let's begin start the tool 1.if  we  want to use the total mem ...

  8. 交互式计算引擎MOLAP篇

    交互式计算引擎MOLAP篇 摘自:<大数据技术体系详解:原理.架构与实践> MOLAP是一种通过预计算cube方式加速查询的OLAP引擎,它的核心思想是“空间换时间”,典型代表包括Drui ...

  9. Docker——概念学习

    百度百科概念: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完全 ...

  10. WebSocket使用中Stomp Client连接报ERROR CODE 200的解决办法

    [转] https://www.cnblogs.com/chrischeng/p/10237523.html 最近在做一个WebSocket项目,后台使用了Stomp协议的WebSocketConfi ...