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

 

以上是我實踐中的理解,僅供參考

相關文章
相關標籤/搜索