1、如題,問一個js機(jī)制問題,是否都是等主執(zhí)行緒執(zhí)行完畢以後,才執(zhí)行非同步操作。
2、JavaScript 運作機(jī)制詳解:再談Event Loop 大部分人都讀過這篇文章,阮老濕說的是:只有主執(zhí)行緒執(zhí)行完畢以後,才會去讀取任務(wù)佇列。
3、今天聽說了一個上下文的說法,大概意思是說某個非同步操作只等和它是同一個上下文的主執(zhí)行緒執(zhí)行完畢。而不等其他的上下文。今天找了好久,也沒找到類似的文章,請人回答! !
你把很多東西感覺搞混了,還有阮一峰的文章。 。 。批判是閱讀。 。他那文章。 。還有很多概念錯誤的。 。
以下是一篇是樸靈的批註:可以參考看一看
樸靈批註版本
nodeJS 官方文件 evenloop process.nextTick timers 關(guān)係
我的理解是node 主執(zhí)行緒跑執(zhí)行緒程式碼,只有檔案I/O,網(wǎng)路I/O,timer才會是非同步事件,才會進(jìn)入非同步佇列,平常你寫的程式碼都是同步的,
例如你有一下一段程序
setTimeout(function(){
console.log('test');
},10);//本來應(yīng)該是10ms后輸出test
for(var i=0;i<10000000;i++){
//但是這個空的for循環(huán)執(zhí)行了50ms
}
//for占住了主線程,倒地timer 事件已經(jīng)到達(dá)觸發(fā)條件,但是主線程被占用
//不能去請求完成的事件隊列。
//所以test 會在50ms后輸出
至於那個上下文的概念,我理解的並不透徹 不知道應(yīng)該算在那一塊裡面,希望大牛給建議。 。歡迎拍磚或踩,請告知錯誤的地方。 。嘿