[英]setTimeout works more that I expect
我有简单的js脚本:
const printDate = (interval) => {
setTimeout(() => {
console.log(new Date());
printDate();
}, interval);
};
printDate(1000);
而且我希望每1秒在控制台中看到1条记录,因为我以1000秒为间隔(即1秒)通过了。
但是,当我运行此脚本时,会收到如下信息:
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
您正在递归调用中传递undefined
为超时: printDate();
( interval
将是undefined
),与传递0
相同。
如果要使用相同的超时时间,请传递interval
:
printDate(interval);
在控制台上打印第一个日期后,需要将间隔传递给printDate()函数。 时间间隔变量作用域仅在第一次调用时可用,从第二次调用开始未定义时间间隔,它将仅打印日期而没有延迟。
正如Felix所说,间隔是不确定的,因此只有第一个超时值为1000。 如果您没有为setTimeout定义数字,它将在您运行代码的环境中使用最小值。 可能是什么。 最可能在3到10毫秒之间。 https://developer.mozilla.org/zh-CN/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Notes
视觉效果:
码:
const printDate = (interval) => { setTimeout(() => { console.log(new Date()); printDate(interval); }, interval); }; printDate(1000);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.