亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Javascript 異步性質

Javascript 異步性質

拉風的咖菲貓 2023-04-20 16:36:37
我最近在修補節點 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 的工作方式造成的嗎?
查看完整描述

2 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

它對 IO 操作是非阻塞的,IO operations include file read write, network read write, database read write etc.

這是由事件循環控制的。

For 循環不是 IO 操作,但是如果你在 for 循環中有 IO 操作,你會得到非阻塞的味道。


查看完整回答
反對 回復 2023-04-20
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

Javascript 同步工作。異步工作的東西很少:

setImmediatesetTimeout(), 和諸如fetch(),Promise.resolve()等的承諾。

我還需要提到,來自例如的回調setTimeout被添加到一個任務隊列或也被命名為“回調隊列”,并且它等待事件循環用它的同步代碼完成。事件循環準備就緒后,它將獲取此回調并將其添加到調用堆棧并執行該回調函數。并且此代碼將同步執行。

實際上沒有真正的并行性。為此你應該使用網絡工作者。


查看完整回答
反對 回復 2023-04-20
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號