js引擎在代碼正式施行前會作一個預處理的工做:html
1.收集變量函數
2.收集函數this
變量提高的原理便是html中的執行上下文概念線程
理解:代碼執行的環境rest
時機:代碼正式執行前會進入到執行環境htm
工做:對象
1.建立變量對象:隊列
1)變量作用域
2)函數及函數的參數io
3)全局:window
4)局部:抽象但確實存在的對象
2.確認this的指向
1)全局:this -----》 window
2)局部:this ------》 調用的對象
3.建立做用域鏈(事實上在代碼編譯階段就建立了)
父級做用域鏈 + 當前的變量對象
4.擴展:
ECObj = {
變量對象:{變量 , 函數 , 函數的形參 }
scopeChain:父級做用域鏈 + 當前的變量對象,
this:{ window || 調用的對象}
}
分類:setTimeout setInterval requrestAnimationFrame(ie)
1.宏任務所處的隊列就是宏任務隊列
2.第一個宏任務隊列中只有一個任務:執行主線程的js代碼
3.宏任務隊列能夠有多個
4.當宏任務隊列中的任務所有執行完之後會查看是否有微任務隊列,若是有先執行微任務隊列中的全部任務,若是沒有就查看是否有宏任務隊列
分類: new Promise( ) . then( 回調 ) process.nextTick
1.微任務所處的隊列就是微任務隊列
2.只有一個微任務隊列
3.在上一個宏任務隊列執行完畢以後若是有微任務隊列就會執行微任務隊列中的全部任務