javascript學習筆記(三)——閉包

來源:互聯網
上載者:User

標籤:aaa   rip   參數   var   function   開始   私人化   javascrip   報錯   

1.什麼是閉包?

  閉包的特點:

  • 函數嵌套函數(內建函式、外部函數)
  • 內建函式可以引用外部函數的參數或者變數
  • 外部函數的參數或變數不會被js的記憶體回收機制收回  

  function aaa() {

    var a = 1;

    function bbb() {

      alert(a);

    }

    return bbb;

  }      

  var c = aaa();

  c();

 

=>運算式形式

(function() {

  var a = 1;

  return function() {

    alert(a);

  }

})();    

2.閉包有什麼好處?

  • 希望一個參數或變數長期駐紮在記憶體中(不會被外部函數的記憶體回收機制所回收)
  • 避免全域變數的汙染
  • 實現私人成員的存在

  

  function aaa() {

    var a = 1;

    a++;

    alert(a);

  }

  aaa();  //2

  aaa();  //2,   每次調用aaa(),a的值都從1開始,如果想每次調用aaa()實現a值得累加,怎麼辦呢?——閉包

=>function aaa() {

    var a=1;

    function bbb() {

      a++;

      alert(a);

    }

    return bbb;

  }

  var c= aaa();

  c();  //2

  c();  //3

  c(); //4  因為aaa()被執行後,變數a未被記憶體回收機制收回,而是駐紮在記憶體中,所以每次執行bbb(),a值就會在記憶體值得基礎上加1

3.閉包的用法?

  • 代碼的模組會,成員的私人化

  

var c= (function(){

  var a=1;

  function aaa() {

    a++;

    alert(a);

  }

  function bbb(){

    a++;

    alert(a);

  }

  return {

    aa : aaa,

    bb : bbb    

  }    

})();

c.aa();  //2

c.bb(); //3

alert(a); //報錯,因為a私人化成員

alert(aaa()); //報錯  

 

4.閉包在IE下容易引發記憶體流失

5.閉包的核心是對參數和變數的不會被js記憶體回收機制回收特性的利用。

 

javascript學習筆記(三)——閉包

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.