4、JavaScript進階之閉包,javascript

來源:互聯網
上載者:User

4、JavaScript進階之閉包,javascript

一、什麼是閉包

距離上一次更新有一段時間了,過年你懂得,接下來就談談JavaScript的進階用法——閉包。js的閉包其實不是什麼難懂的高深的概念,只是有些書籍當中介紹的不夠易懂或者說舉得例子不太恰當,現在我們就通過簡單的例子來理解“閉包”。作為程式員,也許一段針對的代碼,比那些文字描述更能說明問題,用代碼說話,眼見為實。

好了,先看下面的一段代碼:

   function t1(){        var age = 20;         function t2(){            alert(age);        }        return t2;    }    var age = 100;    var temp = t1();    temp();//20

為了突出 執行效果,在t1函數外層也定義了一個age=100的變數,執行完 var temp = t1(); 後,將函數t2賦予了temp,這樣temp其實就是t2函數的引用,緊接著執行temp,輸出結果竟然是20,毫無疑問,變數age是在t1函數的範圍下的,你已經看到JavaScript語言與其他語言不同的地方。

在大部分語言中,如java,函數t1內的局部變數會隨著函數t1執行結束而銷毀,但是在js中,變數age=20卻被t2捕抓,即使是t1函數執行結束後,依然可以通過t2訪問到age
  這種情況,即返回的t2函數不是孤立的,甚至把周圍的變數環境,形成了一個‘封閉包’,一起返回,所以叫‘閉包’


二、閉包的應用

JavaScript既然有閉包的實現,那麼JavaScript的閉包是怎麼使用的或應用在哪種情況下呢?通過上面的例子已經看到,函數t1內部的age變數只能通過返回的t2函數訪問,那麼age是不是相當於java的private私人變數呢,哈哈,這個在下一篇會講到,而且將通過“閉包”將屬性封裝在內部,做成介面,別人也就看不見,也不會汙染到其他的變數,想想是不是呢。

講那麼多,我們就通過一個實際的例子看看:

要求:實現一個計數器,每次調用某函數,使計時器的值加1

1、閉包實現

   function counter(){        var i = 0;//但counter執行完畢後,除了返回的inc函數,其他函數訪問不了變數i        var inc = function(){            return ++i;        }        return inc;    }    var c = counter();    alert(c());    alert(c());    alert(c());
2、可以結合“匿名”函數,進行簡化

   var counter = (function(){        var i = 0;        return function(){            return ++i;        }    })();    alert(counter());    alert(counter());    alert(counter());
相信你已經看到了閉包的好處,但是請不到胡亂使用閉包,因為在IE瀏覽器下是使用“計數”的方式跟蹤對象來進行記憶體回收的,由於閉包的特新,不會釋放局部變數,如果造成過多的循環參考,將會引起“記憶體泄露”。


聯繫我們

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