Node.JS REPL 甚至在我按下回车键之前就计算了哪种类型的函数?

What type of function does the Node.JS REPL evaluates even before I hit enter?

我注意到有时在 Node.JS REPL 中,它会评估当前表达式的结果, even before I hit enter.

但这种行为让我感到困惑:它怎么知道我是否想评估它?我知道评估 4+5 并没有坏处,但如果它是 a function that involved heavy calculations? 会不会减慢我的机器?更糟糕的是,如果函数弄乱了一些内部状态,比如全局变量怎么办?

我尝试 google ,但没有成功。不过,我注意到两件有趣的事情:当我尝试递归地计算 Fibonacci 时,它计算到 Fib(30),而不是 Fib(31)。我的猜测是,如果函数计算时间太长,Node.JS 会放弃给我们“预览”。但我不太确定它在内部是如何工作的。

我尝试用谷歌搜索但收效甚微。那么,Node.JS 是如何准确地知道它是否应该计算一个表达式的呢?我们在按下回车键之前看到的“结果预览”是否有名称?有没有办法禁用它?

该功能称为热切评估,您可以在 this issue 上了解更多信息。

当您键入一个表达式时,该表达式会在超时(以防止繁重的计算)和限制条件下进行计算,如果该表达式会导致副作用,则计算将停止。 (code)