setInterval的理解

 

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都找不到了,就没法清除了。

 

以上是我实践中的理解,仅供参考

相关文章
相关标签/搜索