我有简单的js脚本:
const printDate = (interval) => {
setTimeout(() => {
console.log(new Date());
printDate();
}, interval);
};
printDate(1000);
我希望每1秒在控制台中看到1条记录,因为我以间隔(即1秒)传递1000。
但是当我运行这个脚本时,我会收到这样的内容:
km:gh kvol$ node test.js
2017-07-20T05:54:20.241Z
2017-07-20T05:54:20.244Z
2017-07-20T05:54:20.246Z
2017-07-20T05:54:20.247Z
2017-07-20T05:54:20.249Z
2017-07-20T05:54:20.250Z
2017-07-20T05:54:20.252Z
2017-07-20T05:54:20.253Z
2017-07-20T05:54:20.255Z
2017-07-20T05:54:20.256Z
2017-07-20T05:54:20.258Z
2017-07-20T05:54:20.259Z
2017-07-20T05:54:20.261Z
2017-07-20T05:54:20.262Z
2017-07-20T05:54:20.264Z
2017-07-20T05:54:20.265Z
2017-07-20T05:54:20.267Z
2017-07-20T05:54:20.268Z
2017-07-20T05:54:20.270Z
2017-07-20T05:54:20.271Z
2017-07-20T05:54:20.273Z
2017-07-20T05:54:20.274Z
2017-07-20T05:54:20.276Z
2017-07-20T05:54:20.277Z
2017-07-20T05:54:20.279Z
2017-07-20T05:54:20.280Z
2017-07-20T05:54:20.281Z
2017-07-20T05:54:20.283Z
2017-07-20T05:54:20.284Z
2017-07-20T05:54:20.286Z
2017-07-20T05:54:20.288Z
2017-07-20T05:54:20.290Z
2017-07-20T05:54:20.291Z
2017-07-20T05:54:20.293Z
2017-07-20T05:54:20.294Z
2017-07-20T05:54:20.296Z
答案 0 :(得分:5)
您在递归调用中将undefined
作为超时传递:printDate();
(interval
将为undefined
),这与传递0
相同。
如果您想使用相同的超时,请传递interval
:
printDate(interval);
答案 1 :(得分:1)
在控制台上打印第一个日期后,您需要将间隔传递给printDate()函数。区间变量范围仅在第一次调用时可用,从第二次调用开始,没有定义区间,它只是简单地打印日期。
答案 2 :(得分:1)
正如Felix所说,间隔是未定义的,所以只有第一个超时有1000个值。如果您没有为setTimeout定义数字,它将使用您运行代码的环境的最小值。它可能是任何东西。最有可能在3-10毫秒之间。 https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Notes
视觉:
代码:
const printDate = (interval) => {
setTimeout(() => {
console.log(new Date());
printDate(interval);
}, interval);
};
printDate(1000);