JS是腳本語言,但它也會通過編譯,編譯就發生在代碼執行前的極短期內(微妙級甚至更短)bash
編譯器進行代碼生成時,會建立執行上下文。函數
有三處代碼能夠建立執行上下文post
這些上下文構成一個執行上下文棧,新的上下文會添加到棧的頂部,執行完則出棧,直到再次到達全局執行上下文。this
每一個執行上下文有三個重要屬性:變量對象(Variable Object),做用域鏈(Scope chain)和thisspa
executionContextObj = {
// 變量對象
'variableObject': { /* function arguments / parameters, inner variable and function declarations */ },
// 做用域鏈
'scopeChain': { /* variableObject + all parent execution context's variableObject */ }, 'this': {} } 複製代碼
其建立過程以下指針
1)建立變量對象code
2)創建做用域鏈cdn
做用域就是上面的變量對象,做用域鏈就是由當前執行上下文的變量對象與全部上層執行上下文的變量對象組成的帶頭結點的單向鏈表。對象
3)肯定this的指向blog
執行過程當中最重要的就是事件循環。
歡迎關注個人微博@狂刀二