setInterval回调中的未定义变量

时间:2018-02-22 19:52:25

标签: javascript asynchronous

我正在实现一个简单的countDown函数,给定一个以秒为单位的num,倒数num,num-1,...,0和console.log s " Ring Ring Ring !! !"

使用num方法内置的JavaScript 0setInterval时。我的实现问题是变量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);
}

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

从此处删除参数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);

答案 2 :(得分: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);
}