今天在JS做特效的时候,突然发现一个定时器总是只执行一次,后面就不再执行了。
先贴原代码:
1 var i=1; 2 var fun1=function(){ 3 console.log(i++); 4 } 5 var timer = setInterval(fun1(),1000);
后来经过试验,找到了原因,第五行代码中,setInterval方法的第一个参数,我给的是fun1(),相当于(function(){})() ,即执行某匿名函数。所以我给的是一个执行语句而不是需要给定的一个函数。
当执行到第五局那一行时,定时器去读取给入的第一个参数,由于是执行语句,所以JS先将此语句执行,即控制台输出i++。确定没有接收到函数,定时器停止执行
修改代码如下:
1 var i=1; 2 var fun1=function(){ 3 console.log(i++); 4 } 5 var timer = setInterval(fun1,1000); //第一个参数是函数
贴出来希望大家引以为鉴