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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 變量對象 變量對象是與執行上下文相關的數據作用域,存儲了在上下文中定義的變量和函數聲明。 全局上下文中的變量對象就是全局對象 ## 函數上下文 在函數上下文中,我們用活動對象(activation object, AO)來表示變量對象。 只有到當進入一個執行上下文中,這個執行上下文的變量對象才會被激活,所以才叫 activation object 吶,而只有被激活的變量對象,也就是活動對象上的各種屬性才能被訪問。 ## 執行過程 執行上下文的代碼會分成兩個階段進行處理:分析和執行,我們也可以叫做: 1. 進入執行上下文 2. 代碼執行 ### 進入執行上下文 當進入執行上下文時,這時候還沒有執行代碼, 變量對象會包括: 1. 函數的所有形參 (如果是函數上下文) * 由名稱和對應值組成的一個變量對象的屬性被創建 * 沒有實參,屬性值設為 undefined 2. 函數聲明 * 由名稱和對應值(函數對象(function-object))組成一個變量對象的屬性被創建 * 如果變量對象已經存在相同名稱的屬性,則完全替換這個屬性 3. 變量聲明 * 由名稱和對應值(undefined)組成一個變量對象的屬性被創建; * 如果變量名稱跟已經聲明的形式參數或函數相同,則變量聲明不會干擾已經存在的這類屬性 例如 ``` function foo(a) { var b = 2; function c() {} var d = function() {}; b = 3; } foo(1); ``` 在進入執行上下文后,這時候的 AO 是: ``` AO = { arguments : { 0: 1, length: 1 }, a: 1, b: undefined, c: reference to function c(){}, d: undefined } ``` ### 代碼執行 在代碼執行階段,會順序執行代碼,根據代碼,修改變量對象的值 還是上面的例子,當代碼執行完后,這時候的 AO 是: ``` AO = { arguments : { 0: 1, length: 1**** }, a: 1, b: 3, c: reference to function c(){}, d: reference to FunctionExpression "d" } ``` 到這里變量對象的創建過程就介紹完了,讓我們簡潔的總結我們上述所說: 1. 全局上下文的變量對象初始化是全局對象 2. 函數上下文的變量對象初始化只包括 Arguments 對象 3. 在進入執行上下文時會給變量對象添加形參、函數聲明、變量聲明等初始的屬性值 4. 在代碼執行階段,會再次修改變量對象的屬性值 ``` console.log(foo); function foo(){ console.log("foo"); } var foo = 1; ``` 會打印函數,而不是 undefined 。 **這是因為在進入執行上下文時,首先會處理函數聲明,其次會處理變量聲明,如果如果變量名稱跟已經聲明的形式參數或函數相同,則變量聲明不會干擾已經存在的這類屬性。**
                  <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>

                              哎呀哎呀视频在线观看