小记setTimeout

前言:从《原生JS实现轮播(上)》中JS实现渐变效果,引出的setTimeout用法问题。
对于setInterval比较熟悉,但对于setTimeout,因为用得少,不够了解,总觉得有一层神秘的面纱待揭开。
1.setTimeout实现setInterval效果

showTime(); function showTime(){ var today = new Date(); document.write("The time is: " + today.toString()); document.write("
"); setTimeout("showTime()", 5000); //调用自身 }

【小记setTimeout】setInterval的区别?这个还待深究。
2.JavaScript引擎单线程
浏览器多线程/循环阻塞/事件循环模型(这几个概念待了解)
问题:

输出的结果并不是期望的Time elapsed: 500 ms,而是大于1000ms的。因为JS是单线程的,while完成后(执行了1000ms),达到了执行setTimeout的条件了才执行。也就是说,对setTimeout中匿名函数的实际调用被while()循环阻塞了,实际的调用在while()循环阻塞结束后才真正执行。
3.延迟时间为0

显示的结果是:acdb,因为即使延迟时间为0,浏览器也是有默认最小的延迟时间的,如HTML5定义的最小时间间隔是4毫秒。即使我们把setTimeout的毫秒数设置为0,被调用的程序也不会马上启动。
4.setTimeout实现动画
例子:
click

5.setTimeout实现捕获事件
例子(捕获事件又给自己挖了个坑)

6.setTimeout中的this
这个等研究this的时候一起,又挖了个坑。。
参考文章
http://www.cnblogs.com/giggle/p/5346531.html
http://www.cnblogs.com/Medeor/p/4945687.html

    推荐阅读