<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閉包](https://zhuanlan.zhihu.com/p/27857268) [閉包 mdn](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures) [閉包詳解一](https://juejin.im/post/5b081f8d6fb9a07a9b3664b6) [閉包詳解二:JavaScript中的高階函數](https://juejin.im/post/5b167b476fb9a01e5b10f19b) # 什么是閉包 《JavaScript高級程序設計》這樣描述: ``` 閉包是指有權訪問另一個函數作用域中的變量的函數; ``` 《JavaScript權威指南》這樣描述: ``` 從技術的角度講,所有的JavaScript函數都是閉包:它們都是對象,它們都關聯到作用域鏈。 ``` 《你不知道的JavaScript》這樣描述: ``` 當函數可以記住并訪問所在的詞法作用域時,就產生了閉包,即使函數是在當前詞法作用域之外執行。 ``` ``` function fn1() { var name = 'iceman'; function fn2() { console.log(name); } return fn2; } var fn3 = fn1(); fn3(); ``` 這樣就清晰地展示了閉包: 1. fn2的詞法作用域能訪問fn1的作用域 2. 將fn2當做一個值返回 3. fn1執行后,將fn2的引用賦值給fn3 4. 執行fn3,輸出了變量name 我們知道通過引用的關系,fn3就是fn2函數本身。執行fn3能正常輸出name,這不就是fn2能記住并訪問它所在的詞法作用域,而且fn2函數的運行還是在當前詞法作用域之外了。 # 閉包優缺點 優點: 1. 因為在閉包內部保持了對外部活動對象的訪問,但外部的變量卻無法直接訪問內部,避免了全局污染; 2. 可以當做私有成員,彌補了因js語法帶來的面向對象編程的不足; 3. 可以長久的在內存中保存一個自己想要保存的變量. 缺點: 1. 可能導致內存占用過多,因為閉包攜帶了自身的函數作用域 2. 閉包只能取得外部包含函數中得最后一個值
                  <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>

                              哎呀哎呀视频在线观看