setInterval的理解

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

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

猜你喜欢

转载自www.cnblogs.com/shiyuzuxia/p/9758097.html