前言:从《原生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