Javascript 异步性质

我最近在修补节点 js 及其异步特性,并遇到了一些奇怪的事情。这是代码-


let sum = 0;

for(let i=0;i<10000000000;i++){

    sum += i

    if(i==99999999){

        console.log(sum);

    }

}


console.log('abc');


根据非阻塞的定义,它不应该等待 for 循环结果,应该先打印'abc',然后在计算完成后打印 sum 的值,对吗?然而,这并没有发生,程序正在等待 for 循环完成并打印 sum 的值,然后打印“abc”。谁能解释这背后的原因?这是由于 console.log 的工作方式造成的吗?


拉风的咖菲猫
浏览 109回答 2
2回答

莫回无

它对 IO 操作是非阻塞的,IO operations include file read write, network read write, database read write etc.这是由事件循环控制的。For 循环不是 IO 操作,但是如果你在 for 循环中有 IO 操作,你会得到非阻塞的味道。

茅侃侃

Javascript 同步工作。异步工作的东西很少:setImmediate,&nbsp;setTimeout(), 和诸如fetch(),Promise.resolve()等的承诺。我还需要提到,来自例如的回调setTimeout被添加到一个任务队列或也被命名为“回调队列”,并且它等待事件循环用它的同步代码完成。事件循环准备就绪后,它将获取此回调并将其添加到调用堆栈并执行该回调函数。并且此代码将同步执行。实际上没有真正的并行性。为此你应该使用网络工作者。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript