JavaScript閉包入門: 拿"開發部"和"技術牛&q

來源:互聯網
上載者:User

雖然只是一小段菜鳥的學習筆記 , 不過還是希望看到的高手看到不足的時候幫忙指點~

 


一:代碼和執行過程

/**   * http://blog.csdn.net/ruantao1989  * ==>July6 分析一下最簡單的閉包 */function a() { //==>從變數i和對象b的角度來說: 他倆本來是a中的局部變數.如果沒有閉包的話,會在a返回後被銷毀  var i = 0;  function b() { alert( ++i ); //==>b能訪問到a中的變數i(範圍內) }  return b;//==>1.函數a的傳回值,引用自身內部的函數}var c = a();//==>2.此時變數c就是函數a的傳回值:函數b()//==>至此,這個簡單的閉包構建完成: //1.變數c是對象b或者說函數b的引用(見圖); //2.函數a在return給c後理應被銷毀,但變數c扔持有a中對象b的引用,所以a不能被銷毀//3.變數i屬於a,記憶體中繼續生存,並執行其計數的功能//==>3.以下每次調用c(),i都會自加(目前這段代碼中也只有這麼一種辦法能操作i的值)c();c();c();


 

 


二:換個通俗說法翻譯一下:
起因:
1.對象a是公司裡的"開發部" ,裡邊有技術牛人b 和 和只會記編號的i 倆人.
2.c是公司裡最後一個項目,c項目需要"開發部門"的b同學來寫代碼,公司早就想把"開發部門"處理掉 這個項目完了就都開除
經過:

牛人b開始寫c項目中的代碼
結果:
1.所以a這個"開發部"托"員工"b的福,還不能被銷毀
2."開發部"的數數專員i更是幸運的托b的福能在"開發部"裡繼續混口飯吃,而且兢兢業業的執行他的工作:數數

 

 

 


三:舉個沒return正確的反例

function a() {  var i = 10;  function b()  { alert( ++i );  }  //return b; //==>不return b() ,而直接return i return i;}var c = a();alert(c);alert(c);//==>不管打多少次都是i的初始值(每次i都是新變數)

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.