當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JS执行上下文
執行上下文 (變量提升和函數提升的原理)
執行上下文分為全局執行上下文和函數執行上下文
在JS執行代碼的時候就會進入一個執行上下文,執行上下文可以理解為當前代碼的執行環境,它會形成一個作用域。
在一段代碼中會形成很多執行上下文,JS為了更好的管理這些上下文,JS會將這些上下文放入一個棧中,這個棧叫函數調用棧,當上下文中的代碼被執行完畢,該上下文就會被彈出棧
棧底永遠都是全局上下文,而棧頂就是當前正在執行的上下文。
全局執行上下文
- 在執行全局代碼之前將window確定為全局執行上下文,將全局執行上下文壓入棧
- 對全局數據進行預處理
- var 定義的全局變量,添加為window屬性,未賦值(undefined)
- function聲明的全局函數添加為window的方法
- 確定this==window
- 開始執行全局代碼,執行全局代碼過程中遇到調用函數,將形成函數執行上下文,并壓入棧頂,執行函數內部代碼
函數執行上下文
找到當前上下文中的調用函數的代碼
在執行被調用的函數體中的代碼以前,開始創建執行上下文,并壓入棧頂
進入第一個階段-建立階段:
-
建立variableObject(變量對象)對象:
-
建立arguments對象,檢查當前上下文中的參數,建立該對象下的屬性以及屬性值(變量提升)
-
檢查當前上下文中的函數聲明:
每找到一個函數聲明,就在variableObject下面用函數名建立一個屬性,屬性值就是指向該函數在內存中的地址的一個引用 (函數提升)
如果上述函數名已經存在于variableObject下,那么對應的屬性值會被新的引用所覆蓋。
初始化作用域鏈
確定上下文中this的指向對象
代碼執行階段:
執行函數體中的代碼,一行一行地運行代碼,給variableObject中的變量屬性賦值。
總結
- 上一篇: 贵州最新特种工(施工升降机)模拟题集及答
- 下一篇: 使用CSS写正方体,结合JS实现3D轮播