繁体   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