繁体   English   中英

setTimeout的工作超出了我的期望

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM