setTimeout的工作更多,我期望
我有简单的JS脚本:
const printDate = (interval) => { setTimeout(() => { console.log(new Date()); printDate(); }, interval); }; printDate(1000);
我希望每秒钟在控制台上看到1条logging,因为我已经通过了1000(间隔1秒)的logging。
但是,当我运行这个脚本,我收到这样的事情:
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
您在recursion调用printDate();
undefined
作为超时传递: printDate();
( interval
将是undefined
),这与传递0
相同。
如果您想使用相同的超时,则传递interval
:
printDate(interval);
在控制台上打印第一个date之后,您需要将间隔传递给printDate()函数。 间隔variables作用域仅在第一次调用时可用,从第二次调用开始,时间间隔没有被定义,并且它将简单地打印date而没有延迟。
如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);