<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 什么是js垃圾回收機制(前提) 垃圾回收機制(GC:Garbage Collection):執行環境負責管理代碼執行過程中使用的內存。JS的垃圾回收機制是為了以防內存泄漏,內存泄漏的含義就是當已經不需要某塊內存時這塊內存還存在著,沒有被釋放,導致該內存無法被使用,垃圾回收機制就是間歇的不定期的尋找到不再使用的變量,并釋放掉它們所指向的內存。 其實我們通俗的解釋就是:js存在專門的機制去處理我們不用的一些東西,不論是簡單數據類型還是復雜數據類型。 ``` 簡單舉例:var a =1,我們定義了變量a,并且給它賦值為1,隨后我們去改變a的值,a = 100, 現在的話我們知道a的值變成了100,那么數值1我們肯定就不會用到了, 那么js的垃圾回收機制會幫助我們把數值1給回收了,為了避免內存泄漏! ``` **閉包的概念:** `函數內部返回一個函數,這個內部函數被外界所引用`,這個內部函數就不會被js回收機制所銷毀,內部函數所用到的外部函數的變量也不會被銷毀。 ``` 示例: function outer() { let name = 'james' let age = 37 //返回一個函數 return function() { return name + ' is superstar'; } } let func = outer() console.log(func()); //james is superstar ``` **代碼解析** 在上方代碼中我們定義了一個外部函數outer(),在外部函數內部返回了一個函數(內部函數),隨后在外界中將外部函數賦給了func,這個func就是內部函數,然后執行func(),打印出來了相應的結果,在這里,我們使用了外部函數內定義的屬性name和內部函數,所以name和內部函數不會被js回收機制所處理,但是屬性age我們并沒有使用,所以age被js垃圾回收機制所回收! * **優點和缺點** * 在代碼解析中,我們知道了 我們所創建的臨時變量`name`將不會被回收,所以閉包的優點就是:`讓臨時變量可以永駐內存`。 * 但是如果我們不停的執行`func`,那么就會出問題,這樣的話會使內存中不斷的儲存臨時變量,就會導致`內存泄漏`,所以閉包的缺點就是:`會造成內存泄漏`。 **應用:閉包防抖和節流** 1.在這里寫一個搜索框,搜索框的內容輸入頻次可以使用`防抖`或`節流`來優化 ``` <input type="text" id="search"> ``` 防抖: ``` search.oninput = (function() { let timer = null return ()=>{ if(timer) { clearTimeout(timer) } timer = setTimeout(()=>{ console.log('發送了ajax請求'); },500) } })() ``` 節流: ``` search.oninput = (function(){ let flag=true return ()=>{ if(flag) { setTimeout(()=>{ console.log('發送了ajax請求'); flag = true },500) } flag = false } })() ``` 閉包的實戰常見場景主要是在防抖和節流中,就是為了防止在防抖和節流中我們創建的`臨時變量`會丟失!
                  <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>

                              哎呀哎呀视频在线观看