<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之旅 廣告
                [TOC] >[success] # 尾調用優化 ~~~ '尾調用優化'使用場景,一般在'遞歸'時使用會有顯著效果,在'ES6'中對函數最有趣的改動或許就是一項 '引擎優化',它改變了'尾部調用'的系統。'尾調用'指的是調用函數的語句是'另一個函數的最后語句',有3點, 符合這'3'點就是達成了'尾調用優化' 1. 尾調用不能引用當前棧幀中的變量(意味著'該函數不能是閉包') 2. 進行尾調用的函數在'尾調用返回結果后不能做額外操作' 3. 尾調用的結果作為當前函數的返回值 ~~~ ~~~ function doSomething() { return doSomethingElse() // 尾調用 } ~~~ <br/> >[danger] ## 錯誤尾調用優化案例 1. 沒有return ~~~ "use strict" function doSomething() { doSomethingElse() // 未被優化:缺少 return } ~~~ 2. 在return時候還進行加法操作 ~~~ "use strict" function doSomething() { return 1 + doSomethingElse() // 未被優化:在返回之后還要執行加法 } ~~~ 3. 將函數調用的結果儲存在一個變量上,之后才返回了 結果 ~~~ "use strict" function doSomething() { let result = doSomethingElse() // 未被優化:調用并不在尾部 return result } ~~~ 4. 閉包能夠訪問上層作用域的變量,會導致尾 調用優化被關閉 ~~~ "use strict"; function doSomething() { let num = 1, func = () => num return func() // 未被優化:此函數是閉包 } ~~~ <br/> >[success] ## 如何控制尾調用優化 ~~~ 在實踐中,'尾調用優化在后臺進行',所以不必對此考慮太多,除非要盡力去優化一個函數。尾調用優化的主要用 例是在'遞歸函數'中,而且在其中的優化具有最大效果。考慮以下計算階乘的函數: ~~~ 優化前: ~~~ // 階乘遞歸 function factorial(n) { if (n <= 1) { return 1 } else { // 未被優化:在返回之后還要執行乘法 return n * factorial(n - 1) } } ~~~ 優化后: ~~~ function factorial(n, p = 1) { if (n <= 1) { return 1 * p } else { let result = n * p // 被優化 return factorial(n - 1, result) } } ~~~
                  <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>

                              哎呀哎呀视频在线观看