为什么我的值在Javascript中调用setTimeout函数之前会发生变化?

时间:2016-09-10 14:19:10

标签: javascript

这是一个最小的可复制代码:

function print(num) {
   console.log(num)
}

...稍后在代码中

var num = 5;
var count = 0;
while (num != 0) {
   setTimeout(function() {print(num);}, 1000 * count)
   num--;
   count++;
}

我希望我的输出为5 4 3 2 1,但我的输出为0 0 0 0 0

为什么会这样?

2 个答案:

答案 0 :(得分:1)

在此函数中调用setTimeout()

setTimeout(print(num), 1000 * count)

调用您的print()函数并传递其返回值。如果你想在计时器到期时调用print(),你必须传递一个函数来调用它:

setTimeout(function() { print(num); }, 1000 * count)

答案 1 :(得分:0)

如果您希望使用该时间点的值,则必须通过setTimeout函数传入num的值

function print(num) {
   console.log(num)
}

var num = 5;
var count = 0;
while (num != 0) {
   setTimeout(print, 1000 * count, num);
   num--;
   count++;
}