JS自带的定时器函数有两个:
setInterval (函数名, 延迟毫秒) ; 指定某个函数重复执行;
setTimeout(函数名,延迟毫秒);指定某个函数多少秒后只执行一次;
setTimeout举例:
1 <script>
2 var fn = function (){
3 alert("定时器");
4 };
5 setTimeout (fn,5000); //延迟2000毫秒后执行弹出函数;程序并不会卡在这里等到2000毫秒,而是会跳出一个独立的进程去管理这个定时器,其余的代码段会继续执行;
6 function a (){
7 alert("不是定时器"); //会先弹出这个
8 }
9 a();
10 </script>
setInterval举例:
1 <script>
2 var fn = function (){
3 alert("定时器");
4 };
5 setInterval (fn,5000); //会独立一个进程去管理这个函数每隔5000毫秒重复执行函数fn,
6 function a (){
7 alert("不是定时器"); //这个会先跳出; 就算上边的setInterval 设定的延迟时间为0 ,也是下面的这个alert先跳出;
8 }
9 a();
10 </script>
定时器函数执行时传的参数必须是函数,可以是return的函数,也可以是匿名函数,也可以是有名函数的函数名;
1 setInterval(function(){
2 console.log(2);
3 },500); //匿名函数的时候,相当于到时间就自执行;
函数带括号执行,
1 setTimeout("a()",3000);//可以执行,因为第一次定义的时候,他是把"a()"当成一个字符串去定义了,所以并不会执行,第二次定时器时间到了去执行的时候,会把他读成函数执行表达式;
2 function a (){
3 alert(4);
4 }
如果把函数带括号执行当成一个
1 !function(){
2 sertTimeout("a()",3000){ //这样会报错a is no defind ;setTimeout是一个windows的定义的函数,没有带对象执行的时候,默认执行的对象是windows,
而function a 是在匿名函数这个作用域下的一个函数名,所以在执行的时候会读不到函数a;
3 function a (){
4 alert(4);
5 }
6 }
7 }();
清除定时器的函数:
clearInterval() ;清除循环定时器;
clearTimeout();清除单次定时器;
所谓的定时器就是关闭掉定时器的进程,要通过定时器的进程去关掉定时器首先就要知道定时器的进程号,设置定时器函数的返回值就是其进程号,用上述2个函数可以将定时器进程杀死;
1 function fn (){
2 console.log(2);
3 }
4 var x = setInterval(fn,500);
5 document.onclick = function () {
6 clearInterval(x); //写在事件函数里面是避免直接执行;
7 }
点击控制定时器执行:
1 function fn (){
2 console.log(2);
3 }
4 document.checkclick = false;
5 document.onclick = function (){
6 if (document.checkclick===true){
7 clearInterval(x);
8 document.checkclick = false;
9 }
10 else {
11 x = setInterval(fn,500);
12 document.checkclick = true;
13 }
14 };
setInterval和setTimeout时间可能是不准确的;
1 <script>
2 var a = new Date;
3 function fn (){
4 var b = new Date;
5 console.log(b-a); //可以看到,时间间隔在30毫秒左右,有些微误差(10至20都有可能,根据电脑和浏览器的性能不同而不同);
6 a=b;
7 }
8 setInterval(fn,30);//
9 </script>