<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## **執行上下文棧** 在 `ECMAScript` 中的代碼有三種類型:`global`,`function` 和 `eval`。 每一種代碼的執行都需要依賴自身的上下文,當然 `global` 的上下文可能涵蓋了很多的 `function` 和 `eval` 的實例。 **函數的每一次調用,都會進入函數執行中的上下文,取得當前執行上下文中的變量,一個 `function` 可能會產生無限的上下文環境,因為每一次函數的調用(甚至遞歸)都會產生一個新的上下文環境。** ``` function foo(num) {} foo(10) foo(20) foo(30) // 雖然調用相同的function,但是每次都會產生不同的上下文 // 包含不同的狀態,例如參數num的值 ``` 一個執行上下文可以激活另一個上下文,就好比一個函數調用了另一個函數(比如在全局的上下文中調用一個全局函數),然后一層一層調用下去。邏輯上來說,這種實現方式是棧,我們可以稱之為上下文堆棧。 激活其他上下文的某個上下文被稱為 *調用者(caller)* ,被激活的上下文被稱為 *被調用者(callee)* 。 被調用者同時也可能是調用者(比如一個在全局上下文中被調用的函數調用某些自身的內部方法)。 當一個 *調用者(caller)* 激活了一個 *被調用者(callee)* ,那么這個 *調用者(caller)* 就會暫停它自身的執行,然后將控制權交給這個 *被調用者(callee)* ,于是這個 *被調用者(callee)* 被放入堆棧,稱為進行中的上下文 `[running/active execution context]` ,當這個 *被調用者(callee)* 的上下文結束之后,又會把控制權再次交給它的 *調用者(caller)* ,然后 *調用者(caller)* 會在剛才暫停的地方繼續執行。在這個 *調用者(caller)* 結束之后,會繼續執行下面的代碼,觸發其他的上下文。一個 *被調用者(callee)* 可以用返回 `return` 或者拋出異常 `exception` 來結束自身的上下文。 如下圖,所有的 `ECMAScript` 代碼執行都可以看作是一個執行上下文堆棧 `[execution context (EC) stack]`。堆棧的頂部就是處于激活狀態的上下文。 ![](https://box.kancloud.cn/f78f0f3c0b4651a6073da3cb42a5da1a_229x136.png) 當一段程序開始時,會先進入全局執行上下文環境 `[global execution context]`,這個也是堆棧中最底部的元素。此全局程序會開始初始化,初始化生成必要的對象和函數,在此全局上下文執行的過程中,它可能會激活一些方法(初始化過的方法),然后進入它們的上下文環境,然后將新的元素壓入堆棧。在這些初始化都結束之后,這個系統會等待一些事件(例如用戶鼠標事件),會觸發一些方法,然后進入一個新的上下文環境。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看