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);