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>