node.js 中的空循环行为

Posted

技术标签:

【中文标题】node.js 中的空循环行为【英文标题】:Empty for loop behavior in node.js 【发布时间】:2019-01-14 01:46:50 【问题描述】:

我正在尝试测试 node.js 中的循环行为。在 javascript/node.js 中,for 循环是同步的,但如果它们在循环中没有语句怎么办。

例如:

console.log("START")
for(var i=0; i<100000000;i++)

console.log("END")

当我在 node.js 中运行上面的代码时,它只会打印:

START
END

执行完成。

但如果循环中有语句,则执行完整的循环然后结束:

console.log("START")
for(var i=0; i<100000000;i++)
   console.log("LOOP "+i);

console.log("END")

输出是:

START
LOOP 0
LOOP 1
....
....
....
LOOP 99999999
END

那么如果node.js中的for循环中没有语句会怎样呢?

【问题讨论】:

它会像执行循环一样运行。你觉得哪里不对? 这是一个技巧问题吗? @appleapple 不,当循环中没有语句时,它就不会执行。 @OnkarJanwa 你是怎么检查的?我看不出输出有什么不同。你推断出CPU指令了吗?还是不停地设置断点? 这与 node.js 有什么关系? 【参考方案1】:

我终于明白了。无论是 JavaScript 还是 Node.js,for 循环始终是同步的。并且 node.js 不会跳过一个空循环。

执行如下代码:

console.log("START")
for(var i=0; i<10000000000;i++)

console.log(i);
console.log("END")

输出是:

START
10000000000
END

【讨论】:

区别在于循环的运行长度。如果长度很小,您将看不到循环运行的任何时间。【参考方案2】:

即使没有语句,是的,仍然有一些计算,如 initializationcondition 和/或 final-expression

此外,有时人们确实使用 for 而没有声明。你可以看看MDN: Using for without a statement。

【讨论】:

以上是关于node.js 中的空循环行为的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 进程在 AWS Fargate 中的行为如何?

循环然后重置 node.js 中的数组

JavaScript 中的事件循环和 Node.js 中的异步非阻塞 I/O 有啥区别?

异步 Node.js 循环中的变量范围

Node.js 中 For 循环中的 async.waterfall

Node.js 中 For 循环中的 async.waterfall