<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### JS的執行階段 解釋器解釋完語法規則后,就開始執行,然后整個執行流程中大致包含以下概念: - 執行上下文,執行堆棧概念(如全局上下文,當前活動上下文) - VO(變量對象)和 AO(活動對象) - 作用域鏈 - this 機制等 **執行上下文簡單解釋** - JS 有 `執行上下文` - 瀏覽器首次載入腳本,它將創建 `全局執行上下文`,并壓入執行棧棧頂(不可被彈出) - 然后每進入其它作用域就創建對應的執行上下文并把它壓入執行棧的頂部 - 一旦對應的上下文執行完畢,就從棧頂彈出,并將上下文控制權交給當前的棧。 - 這樣依次執行(最終都會回到全局執行上下文) 譬如,如果程序執行完畢,被彈出執行棧,然后有沒有被引用(沒有形成閉包),那么這個函數中用到的內存就會被垃圾處理器自動回收 ![img](http://xiaoyulive.oss-cn-beijing.aliyuncs.com/date/2018-04-27/js_engine_context_stack.png) 然后執行上下文與VO,作用域鏈,this的關系是: 每一個執行上下文,都有三個重要屬性: - 變量對象 (`Variable object,VO`) - 作用域鏈 (`Scope chain`) - `this` ![img](http://xiaoyulive.oss-cn-beijing.aliyuncs.com/date/2018-04-27/js_engine_context.png) **VO 與 AO** VO 是執行上下文的屬性(抽象概念),但是**只有全局上下文的變量對象允許通過VO的屬性名稱來間接訪問(因為在全局上下文里,全局對象自身就是變量對象)** AO(`activation object`),當函數被調用者激活,AO就被創建了 可以理解為: - 在函數上下文中:`VO === AO` - 在全局上下文中:`VO === this === global` 總的來說,VO中會存放一些變量信息(如聲明的變量,函數,`arguments`參數等等) **作用域鏈** 它是執行上下文中的一個屬性,原理和原型鏈很相似,作用很重要。 譬如流程簡述: ``` 在函數上下文中,查找一個變量foo 如果函數的VO中找到了,就直接使用 否則去它的父級作用域鏈中(__parent__)找 如果父級中沒找到,繼續往上找 直到全局上下文中也沒找到就報錯 ``` ![img](http://xiaoyulive.oss-cn-beijing.aliyuncs.com/date/2018-04-27/js_engine_scopechain.png) **this指針** 這也是JS的核心知識之一,特別注意:**this是執行上下文環境的一個屬性,而不是某個變量對象的屬性** 因此: - this 是沒有一個類似搜尋變量的過程 - 當代碼中使用了this,這個 this的值就直接從執行的上下文中獲取了,而不會從作用域鏈中搜尋 - this的值只取決中進入上下文時的情況 所以經典的例子: ```js var baz = 200; var bar = { baz: 100, foo: function() { console.log(this.baz); } }; var foo = bar.foo; // 進入環境:global foo(); // 200,嚴格模式中會報錯,Cannot read property 'baz' of undefined // 進入環境:global bar bar.foo(); // 100 ``` 就要明白了上面 this 的介紹,上述例子很好理解
                  <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>

                              哎呀哎呀视频在线观看