js實現一個打點計時器

問題描述:

1、從 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一個數字,每次數字增幅 1
2、返回的對象中需要包含一個 cancel 方法,用於停止定時操作
3、第一個數需要立即輸出

實現法一(setTimeout()方法):

function count(start, end) {
    if(start <= end){
        console.log(start++);
        st = setTimeout(function(){count(start, end)}, 100);
    }
    return {
        cancel: function(){clearTimeout(st);}
    }
}
count(1, 10);

實現法二(setInterval()方法):

function count(start, end) {
    console.log(start++);
    var timer = setInterval(function () {
        if (start <= end) {
            console.log(start++)
        } 
    }, 100);
    return {
        cancel: function () {
            clearInterval(timer)
        }
    }
}
count(1, 10);

知識點:
setTimeout()方法用於在指定的毫秒數後調用函數或計算表達式。
語法:setTimeout(code, millisec)
注意:setTimeout() 只執行 code 一次。如果要多次調用,請使用 setInterval() 或者讓 code 自身再次調用 setTimeout()。

setInterval() 方法可按照指定的週期(以毫秒計)來調用函數或計算表達式。
語法:setInterval(code ,millisec[,"lang"])
setInterval() 方法會不停地調用函數,直到 clearInterval() 被調用或窗口被關閉。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的參數。

注意:兩個方法的第一個參數可以是字符串,也可以是函數
(1)如果是字符串, 則參數是 要執行的javascript代碼串(加雙引號), 當 作普通javascript語句執行即可 。 和eval()差不多,執行的環境是全局,所以不能訪問函數作用域的變量。
(2)如果是函數(有括弧),則參數是該函數 (不加雙引號) 的返回值,即真正執行的是其返回值,作用是【數值傳遞】。若返回值是另一個函數對象X,則執行的是函數X裏的內容;若函數沒定義返回值時值爲undefined,或返回值爲非函數對象,則無任何執行操作。
(3)如果是函數名(無括弧),則參數是該函數對象 (不加雙引號) 本身,即真正執行的就是函數中的語句,且與返回值無關,作用是【函數調用】。通過”function() { xxx(argv); }”還能訪問該函數作用域鏈上的變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章