setInterval 和setTimeout 清空定时器,返回值,赋值为null的区别
說到定時器,很多人都不陌生,覺得這個有什么說的,很簡單的了,其實你真正的理解了它了嗎? 定時器的返回值是什么?clearInterval和 null有什么區別,可能有些干了幾年的都不知道,下面我以setInterval為例來依次說下:
1.定時器的返回值
定時器是有返回值得,返回值代表著是第幾個定時器,類型是number類型,也可以用來取消定時器,它是定時器的唯一標識符。
timer的值一定是1,number類型,因為一直是這個定時器在不斷的執行所以它的返回值始終是1,返回值的作用就是作為一個引用,指向setInterval,我們也可以用它來清楚定時器 clearInterval(timer)。再看下面代碼,內容不變,只加了一個調用。
var num = 1;function fn() {var timer = setInterval(function () {console.log(num);console.log(timer)}, 1000);};fn();//1,1fn();//1,2因為再一次調用了,出現了第2個定時器,所以當第2次調用時,timer的值變成了2,當然清除定時器你也可以直接用clearInterval(2);現在你知道定時器的返回值是什么了吧?返回值是一個數字,代表當前是第幾個定時器而已。
2.定時器賦值為null和清除定時器不是同一個概念
很多人可能會誤認為定時器復制為null就等于清楚了定時器,這個是個錯誤的理解。上面說了 timer只不過是setInterval的一個引用而已,你賦值timer為null,只不過是清除了timer這個變量,清除了timer的內存占用,setInterval還是存在的??聪旅娴拇a:
var num = 1; function fn() {var timer = setInterval(function () {console.log(num);timer = null;console.log(timer);}, 1000); }; fn();//1,null 1,null 1,null .....賦值了timer為null 但是還是一直輸出1,就說明定時器更本沒有清除。清除定時器只能用clearInterval(timer)。
var num = 1; function fn() {var timer = setInterval(function () {console.log(num);console.log(timer);clearInterval(timer);}, 1000); }; fn();//1,1這樣就只輸出一次1,1,因為后面清除了定時器。在頁面創建了大量的自定義對象,但是調用后內存無法釋放,即使刷新或跳到其它頁面,內存仍然沒有清空,只有關閉瀏覽器,內存才釋放,長時間使用系統會造成客戶端報“虛擬內存不足,所以很多人會清除了定時器再賦值null可以釋放內存占用。
var num = 1;function fn() {var timer = setInterval(function () {console.log(num);clearInterval(timer);timer =null;}, 1000);};fn();//13.關于定時器參數問題
相信很多人覺得定時器就2個參數,第一個是個function函數,第二個是個延時時間,這個是我們平時用的最多的。其實并不是這樣的,我拿setTimeout為例來說下:
1.第一個參數函數,第二個參數為delay時間
var num = 1;function fn() {var timer = setTimeout(function () {console.log(num);}, 1000);};fn();//1因為 num變量再定時器函數中沒有,它會向父級尋找所以num =1;其實我們可以傳遞參數的。
2.第一個參數函數,第二個參數為delay時間,第三個參數為傳遞的參數
var num = 1;function fn() {var timer = setTimeout(function (num) {console.log(num);}, 1000,'我是傳遞的參數');}; fn();//我是傳遞的參數因為我往定時器函數中傳遞了參數,所以打印出來的值是我傳遞的參數值。其實第一個參數可以不是函數,可以是字符串。
2.第一個參數字符串,第二個參數為delay時間(使用該語法是不推薦的, 原因和使用 eval()一樣,有安全風險)
var num = 1; function fn() {var timer = setTimeout('console.log(num)', 1000); }; fn();//1其實它是能解析字符串,包括字符串函數,這里不能叫函數,只是寫法有點區別
var num = 1; var string = 'function (){console.log(num)}'; function fn() {var timer = setInterval('('+string+')'+"();",1000); }; fn();定時器里面的函數有2種寫法,上面string函數(不是字符串)為例子,一種就是setInterval(string,1000);它會自己調用,還有一種就是setInterval(‘string()’,1000)
總結
以上是生活随笔為你收集整理的setInterval 和setTimeout 清空定时器,返回值,赋值为null的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于HTTP和HTTPS的区别
- 下一篇: 小游戏策划案例精选_小游戏活动策划案?