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