本文理前端所有關(guān)鍵的知識點(diǎn),偶爾看一眼,避免遺忘~
個(gè)人理解,對于前端有以下幾個(gè)關(guān)鍵點(diǎn)需要掌握唆垃,下邊的四條與其他語言差異較大:
1. js執(zhí)行上下文
js的執(zhí)行上下文與java、oc痘儡、c++等其他較為標(biāo)準(zhǔn)的面向?qū)ο蟛⒉灰粯釉颍话銓τ诤瘮?shù)調(diào)用都是用普通的棧來表示就可以了。但是由于js的歷史原因沉删,單純一個(gè)棧已經(jīng)解決不了了渐尿。只能是兩個(gè)棧:執(zhí)行上下文棧和詞法變量棧
2. this(可能是最好理解的版本了)
標(biāo)準(zhǔn)的面向?qū)ο笳Z言中,都有一個(gè)self矾瑰,用來指向類對象砖茸。而js中使用的是this,與self類似殴穴,最大的區(qū)別在于:
如果是函數(shù)嵌套凉夯,也就是說函數(shù)的外層并不是一個(gè)對象,那么子函數(shù)的this指向的是global
還有一點(diǎn)是需要注意:純函數(shù)的this也是指向global的采幌。很多人說這是js的設(shè)計(jì)缺陷劲够,我覺得這并不是設(shè)計(jì)缺陷。理由如下:其實(shí)js在解析的時(shí)候休傍,就有一個(gè)window對象來維護(hù)整個(gè)js代碼征绎,所以純函數(shù)的this指向global跟我們面向?qū)ο蟮乃季S方式是一致的
3. 宏任務(wù)&微任務(wù)
宏任務(wù)有一個(gè)致命缺點(diǎn):在宏任務(wù)A正在執(zhí)行,任務(wù)隊(duì)列中有BCD在排隊(duì)磨取,但是宏任務(wù)E比較著急怎么辦呢人柿?宏任務(wù)無法解決,應(yīng)該是宏任務(wù)當(dāng)時(shí)的設(shè)計(jì)缺陷忙厌,可能沒想到j(luò)s會這么火凫岖,從簡單好用的角度來設(shè)計(jì)的,哭
? ? 微任務(wù)就是給宏任務(wù)開了一個(gè)口子逢净,將高優(yōu)先級的宏任務(wù)E提升為微任務(wù)哥放,添加到宏任務(wù)A的微任務(wù)列表中扎阶,宏任務(wù)A執(zhí)行完之后,立刻執(zhí)行微任務(wù)列表中的任務(wù)
4.js是單線程的婶芭,即js主線程,也叫渲染線程着饥,在渲染進(jìn)程中
?其實(shí)渲染線程權(quán)限是很少的犀农,運(yùn)行在沙盒中,不能進(jìn)行IO訪問宰掉、不能訪問操作系統(tǒng)內(nèi)核呵哨。渲染線程的權(quán)限都是瀏覽器進(jìn)程控制的。
? ? 還有一個(gè)網(wǎng)絡(luò)進(jìn)程轨奄,用于下載網(wǎng)頁中的內(nèi)容
? ? 進(jìn)程之間通過管道通信孟害,渲染進(jìn)程中的主線程與其他線程之間的通信是通過MQ來實(shí)現(xiàn)的。? ??
前端知識梳理挪拟,一圖流挨务,如下。圖片中內(nèi)容不夠詳盡玉组,詳情及精華請參閱https://mubu.com/doc/4OCulfWgD
轉(zhuǎn)載請標(biāo)明出處哦~