当我在命令行上使用node运行此代码时,它只是挂起而不是在打印零后返回。我理解为什么“这个”没有增加“年龄”,因为函数范围改变了对“this”的引用。
["mm", "3ss", "foo bar foo", "55"]
答案 0 :(得分:2)
它挂起,因为setInterval
以异步方式运行,并且也会永远运行。节点(和其他命令行程序)通常缓冲输出并且不立即打印,有时甚至等待应用程序准备好终止。这可能就是在这种情况下发生的事情。
尝试将setInterval
更改为setTimeout
,然后查看是否要将控制台日志打印出来。
<强>更新强>
如cdbajorin所述,setInterval
和setTimeout
都返回Timeout
对象(至少在节点上,在浏览器中返回数字ID),您可以将其传递到{{1} }和clearTimeout
取消它们。
https://nodejs.org/api/timers.html#timers_setinterval_callback_delay_args
答案 1 :(得分:0)
您必须使用setInterval清除已经训练的间隔。它会在你给出的时间后继续执行。这给你一个滞后的结果,但只是一个设定的间隔。 使用:
var x = setInterval(function() {
// In non-strict mode, the function defines `this`
// as the global object, which is different from the `this`
// defined by the Person() constructor.
this.age++;
}, 1000);
window.clearInterval(x); // for clearing the interval