setInterval 是定时器。
下面是我对setInterval返回值的思考,setInterval()返回的是定时器的id
每个定时器都会有一个id.这个不加以解释。
若一个setInterval执行两次应视为生成了两个定时器,会返回两个id.
下面是我对定时器id的思考:
//var timer = null;
btn.onclick = function (argument) {
//var timer = null;
timer=setInterval(function(){
console.log('我是定时器'+timer);
},30);
}
上面这段代码,当我把timer放到两个位置时,即timer作为全局变量和局部变量会得到两种不同的结果。
timer作为全局变量
我在上面说过连续执行两次setInterval会形成两个定时器,以此类推,连续执行多次会形成多个定时器。
上效果图:
我按了三次按钮,执行了3次setInterval,便会形成3个定时器。
由于timer是全局变量,当我点击第二次按钮是,我的2号定时器的id会覆盖我的一号定时器id,一号定时器便找不到了
相当于用clearInterval清除一样。
timer作为局部变量
我也点击了3次按钮。
由此可以看到timer作为局部变量时,虽说点击事件函数结束后,局部变量也会销毁。
但是并不影响定时器的继续工作,定时器没有因此被销毁,而且定时器里还保存了timer的值。
我就在想定时器是否像一个闭包一样可以保存函数里的环境。他可以保存timer,当然也可以保存其他值,是肯定的。
就不上代码了。
因此我推荐对定时器id的存储变量的声明应该是全局变量。
利于清楚定时器,如作为局部变量定时器的父级函数执行后,定时器的id都找不到了,就无法清除了。
以上是我实践中的理解,仅供参考