为什么这个javascript代码不能干净地退出?

时间:2017-08-15 21:59:46

标签: javascript

当我在命令行上使用node运行此代码时,它只是挂起而不是在打印零后返回。我理解为什么“这个”没有增加“年龄”,因为函数范围改变了对“this”的引用。

["mm", "3ss", "foo bar foo", "55"]

2 个答案:

答案 0 :(得分:2)

它挂起,因为setInterval以异步方式运行,并且也会永远运行。节点(和其他命令行程序)通常缓冲输出并且不立即打印,有时甚至等待应用程序准备好终止。这可能就是在这种情况下发生的事情。

尝试将setInterval更改为setTimeout,然后查看是否要将控制台日志打印出来。

<强>更新

如cdbajorin所述,setIntervalsetTimeout都返回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