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