1. 程式人生 > >setTimeout和setInterval

setTimeout和setInterval

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