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