<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                >[success] # 閱讀跳轉章節 [鏈接](http://www.hmoore.net/cyyspring/more/1278974) >[info] ## 補充說明 var 和function ~~~ 1.瀏覽器首先會把所有帶var/function關鍵字的進行提前聲明或者定義 1.1.帶var的只是提前聲明 1.2.帶function的,此階段聲明+定義{賦值}都完成了 2.下面案例說明在代碼運行之前,進行了了變量提升,即其實下面代碼實際是 var fn // 聲明未賦值但是 函數fn 此時不僅聲明了還賦值了此時fn 是函數 function fn(){ console.log(1); } function fn(){ console.log(2); } // 重新又給fn 聲明又賦值了 變成了新的函數 console.log(fn); console.log(fn); fn = 12; // 此時是變量的賦值, fn 此時已經從函數賦值為了 變量12 console.log(fn); console.log(fn); 因此下面的執行結果 ? fn(){ console.log(2); } ? fn(){ console.log(2); } 12 12 ~~~ * 案例說明 ~~~ console.log(fn); function fn(){ console.log(1); } console.log(fn); var fn = 12; console.log(fn); function fn(){ console.log(2); } console.log(fn); ~~~ >[info] ## 補充說明 塊級作用域 var 和function ~~~ 1.如果在大括號(判斷體/循環體/代碼塊)即'塊',中出現了 let/const/function/class 等關鍵詞聲明變 量,則當前大括號會產生一個'塊級私有上下文';它的上級上下文是所處的環境;var不產生, 也不受塊級上下文的影響,簡單的說var 沒有塊級作用域 ~~~ >[danger] ##### 變量聲明 舉個例子 ~~~ console.log(a) var a = 12 let b = 13 if (1 == 1) { console.log(a) var a = 100 let b = 200 console.log(a) console.log(b) } console.log(a) console.log(b) 打印結果: undefined 12 100 200 100 13 ~~~ ![](https://img.kancloud.cn/b1/68/b168e77cd9c1afd245c9173927073b28_655x486.png) >[danger] ##### function 舉個例子 ~~~ 1.之前解釋過函數在變量提升階段是聲明加定義,在新版瀏覽器中,在塊級作用域中let const 變量聲明屬于塊的, 并不會屬于全局,var 和 function 不受塊作用域的影響,雖然function 不受塊的影響,但在塊中聲明的function, 在塊之前的全局位置調用,僅僅只會是具備聲明而不會具備定義值,但在塊里面的時候function 依舊會定義加 聲明 2.在塊級作用域聲明的function 依舊會在全局創建一份,但注意其實是將塊級function 復制了一份,此時全局和塊 都會有function 定義但相互不會產生影響,當操作塊級的并不會影響全局,以下面代碼為例 ~~~ ~~~ console.log(foo) // 因為塊級聲明的foo function 在塊級之前全局里調用只是聲明不在具有定義性質因此undefined if (1 === 1) { console.log(foo) // 在塊級時候是聲明加定義 function foo() {} foo = 1 console.log(foo) // 重新給foo 賦值 } console.log(foo) // 全局的foo function 會復制一份從塊,此時二者沒有關系,因此塊級中function改變并不影響全局 // 打印結果 undefined [Function: foo] 1 [Function: foo] ~~~ >[danger] ##### 總結 ~~~ 1.let 和const 聲明之前的報錯在詞法解析階段事情,也就是當對js 進行詞法解析階段發現該詞法是let const 聲明 但卻在之前使用即會報錯'Uncaught ReferenceError: Cannot access '參數' before initialization' 2.const 聲明其實本質判斷是內存是否改變,即使來說 const a = 3, a = 3 此時你覺前后都是a 指向都是3內存 沒發生變化,實際在堆棧說過 這里基礎類型創建在棧中,每次重新賦值都會創建新的變量空間 此時 a 和上一次a 只是看著一樣但在棧中是兩個空間 兩個地址 3.console.log(typeof n); //Uncaught ReferenceError: Cannot access 'n' before initialization let n = 20; ~~~ >[danger] ##### 關于var let const 從詞法來解釋
                  <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>

                              哎呀哎呀视频在线观看