setInterval回调中的未定义变量

问题描述 投票:0回答:3

我正在实现一个简单的countDown函数,给定一个以秒为单位的num,倒数num,num-1,...,0和console.logs“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);
}
javascript asynchronous
3个回答
3
投票

你在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);

2
投票

从这里删除param 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);

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.