这是一个最小的可复制代码:
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
为什么会这样?
答案 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++;
}