亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Javascript預解釋與執行上下文Execution Context的關系

Javascript預解釋與執行上下文Execution Context的關系

慕虎7371278 2018-09-03 12:14:24
之前從YouDontKnowJS了解到了JS聲明會隱式‘提升’,就是大概在預解釋階段把變量聲明、函數聲明等先提到作用域的頂端聲明了然后在執行階段才執行賦值等操作,最近又從這篇文章http://davidshariff.com/blog/...深入了解了一下執行上下文的原理,大概是執行前先生成一個executionContextObj:executionContextObj = {    'scopeChain': { /* variableObject + all parent execution context's variableObject */ },    'variableObject': { /* function arguments / parameters, inner variable and function declarations */ },    'this': {}}先初始化作用域鏈scopeChain,然后把參數、聲明的函數和變量等等傳進variableObject:每找到一個函數聲明,就在variableObject下面用函數名建立一個屬性,屬性值就是指向該函數在內存中的地址的一個引用,如果上述函數名已經存在于variableObject下,那么對應的屬性值會被新的引用所覆蓋;接著檢查當前上下文中的變量聲明,每找到一個變量的聲明,就在variableObject下,用變量名建立一個屬性,屬性值為undefined,如果該變量名已經存在于variableObject屬性中,直接跳過(防止指向函數的屬性的值被變量屬性覆蓋為undefined),原屬性值不會被修改。最后this指向調用函數的對象。然后再開始執行,然后執行到其他函數調用時又執行一次上述過程如此類推。就是這段,特別是variableObject的傳值過程讓我覺得非常像預解釋中的提升,是否可以說這就是造成執行前聲明提升的原因,或者說創建executionContextObj的過程可以理解為預解釋?
查看完整描述

目前暫無任何回答

  • 0 回答
  • 0 關注
  • 440 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號