setTimeout和setInterval
阿新 • • 發佈:2017-06-29
ear 取消 ron tro ie9 div span 技術 計算
setInterval語法:按照指定的周期(以毫秒計)來調用函數或計算表達式,直到 clearInterval() 被調用或窗口被關;由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的參數。
setTimeout語法:用於在指定的毫秒數後調用函數或計算表達式,可使用clearTimeout()取消設置的 timeout,clearTimeout()的參數必須是setTimeout()的ID。
setTimeout 和 setInterval 都可接收字符串作為第一個參數,使用此特性會用eval進行調用,如下例:
function show() { console.log("全局區域"); } function test() { function show() { console.log("內部區域"); } setTimeout(‘show()‘, 2000); } test();// 結果:全局區域
分析:由於 eval 在這種情況下不是被直接調用(因為eval的作用域是當前執行的作用域,setTimeout的作用域是在全局,所以eval不是在函數test裏面執行,而是在全局中執行),因此傳遞到 setTimeout 的字符串會自動在全局作用域中執行;因此,上面的回調函數使用的不是定義在 test 作用域中的局部變量 show。簡單的理解,只能調用全局中聲明的函數。
如果我們要調用帶參數的函數可以如下:
function test(a, b) { console.log(a + "和" + b); } //第一種:不推薦做法,因為這樣定時器就會使用到eval setTimeout(‘test(1, 2)‘, 2000); //第二種:使用匿名函數完成功能 setTimeout(function() { test(1, 88); }, 2000); //第三種:IE9及IE9以下不支持此方法 setTimeout(test, 2000, 1, 2);
註意:盡量避免使用 setInterval 函數,從而避免可能導致的回調函數堆積現象,避免導致回調堆積是合理使用 clearInterval() 方法。
setTimeout和setInterval