<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 1.4 提升 考慮一下代碼 ~~~ a = 2; var a; console.log( a ); //2 ~~~ ~~~ console.log( a ); //undefined var a = 2; ~~~ ### 1.4.1 回憶編譯器 引擎會在解釋JavaScript 代碼之前首先對其進行編譯。編譯階段中的一部分工作就是找到所有的聲明,并用合適的作用域將它們關聯起來。 因此:包括變量和函數在內的所有聲明都會在任何代碼被執行前首先被處理。 對第二段代碼,JavaScript 實際上會將其看成兩個聲明:`var a; 和a = 2;`。第一個定義聲明是在編譯階段進行的。第二個賦值聲明會被留在原地等待執行階段。 即: ~~~ var a; console.log( a ); a = 2; ~~~ **所有的聲明(變量和函數)都會被“移動”到各自作用域的最頂端,這個過程被稱為提升。** * 只有聲明本身會被提升,而賦值或其他運行邏輯會留在原地。如果提升改變了代碼執行的順序,會造成非常嚴重的破壞。 * 每個作用域都會進行提升操作。 * 函數聲明會被提升,但是函數表達式卻不會被提升。 ~~~ foo(); // 不是ReferenceError, 而是TypeError! var foo = function bar() { // ... }; ~~~ * 即使是具名的函數表達式,名稱標識符在賦值之前也無法在所在作用域中使用: ~~~ foo(); // TypeError bar(); // ReferenceError var foo = function bar() { // ... }; ~~~ 提升后,即 ~~~ var foo; foo(); //typeError bar(); //ReferenceError foo = function(){ var bar = ....self...; //... } ~~~ ### 1.4.2 函數提升 函數聲明和變量聲明都會被提升。但是一個值得注意的細節(這個細節可以出現在有多個“重復”聲明的代碼中)是函數會首先被提升,然后才是變量。 ~~~ foo(); // 1 var foo; function foo() { console.log( 1 ); } foo = function() { console.log( 2 ); }; ~~~ 盡管重復的var 聲明會被忽略掉,但出現在后面的函數聲明還是可以覆蓋前面的。 ~~~ foo(); // 3 function foo() { console.log( 1 ); } var foo = function() { console.log( 2 ); }; function foo() { console.log( 3 ); } ~~~ 一個普通塊內部的函數聲明通常會被提升到所在作用域的頂部,這個過程不會像下面的代碼暗示的那樣可以被條件判斷所控制:(盡可能避免在塊內部聲明函數) ~~~ foo(); // "b" var a = true; if (a) { function foo() { console.log("a"); } } else { function foo() { console.log("b"); } } ~~~
                  <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>

                              哎呀哎呀视频在线观看