簡體   English   中英

setInterval 回調中的未定義變量

[英]undefined variable within a setInterval callback

我正在實現一個簡單的 countDown 函數,給定一個以秒為單位的 num,倒計時 num、num-1、...、0 和console.log s “Ring Ring Ring!!!” .

num0使用 JavaScript 內置的setInterval方法。 我的實現的問題是變量num打印為undefined變量。

我已經看了一個小時了,無法理清它。 有人可以幫忙嗎? 謝謝!

function countDown(num) {
    var timer = num * 1000;
    var intervalId = setInterval(function(num) {
        if (timer !== 0) {
            console.log("Timer: ", num);
            num--;
            timer -= 1000;
        } else if (timer == 0) {
            console.log("Ring Ring Ring!!!");
            clearInterval(intervalId);
        }
    }, 1000);
}

你在 setInterval 函數中有num只需刪除它

 function countDown(num) { var timer = num*1000; var intervalId = setInterval(function(){ if(timer !== 0){ console.log("Timer: ", num); num--; timer -= 1000; } else if(timer == 0){ console.log("Ring Ring Ring!!!"); clearInterval(intervalId); } }, 1000); } countDown(20);

從這里刪除參數num

setInterval(function(num));
                     ^

該參數隱藏了function countDown(num) {...}的外部參數

 function countDown(num) { var timer = num * 1000; var intervalId = setInterval(function() { if (timer !== 0) { console.log("Timer: ", num); num--; timer -= 1000; } else if (timer == 0) { console.log("Ring Ring Ring!!!"); clearInterval(intervalId); } }, 1000); } countDown(1);

您無需將num作為參數傳遞給匿名函數

所以下面的代碼應該工作: -

function countDown(num) {
    var timer = num*1000;
    var intervalId = setInterval(function(){  //removed num argument
        if(timer !== 0){
            console.log("Timer: ", num);
            num--;
            timer -= 1000;
        } else if(timer == 0){
            console.log("Ring Ring Ring!!!");
            clearInterval(intervalId);
        }
    }, 1000);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM