闭包的应用
?閉包的應用
?
閉包是ECMAScript最強大的特性之一。所謂“閉包”,是指在一個函數的執行過程中返回另一個函數對象。如:
function testClosure()
{
?? ??? ?//private
?? ?var a="private";
?? ?function getValue()
?? ?{
?????? ??? ?//引用testClosure的變量
?? ??? ?alert( a );
?? ?}
?? ??? ?//返回對內部函數的引用
?? ?return getValue;
}
var getV = testClosure();
getV();
在闡述閉包執行調用的過程之前,我們需要了解一下JavaScript的垃圾自動回收機制。
ECMA262規范要求遵循本規范的語言均要設計垃圾自動回收機制,但是規范中并沒有詳細說明相關的細節,而具體的回收方式留給語言自身來決定。盡管不同的引擎實現的方式和側重點不同,但大致的思想都是相同的,即如果對象不再“可引用(由于不存在對它的引用,使執行代碼無法再訪問到它)”時,該對象就成為垃圾回收的目標。因而,在將來的某個時刻(不確定何時)會將這個對象銷毀并將它所占用的一切資源釋放,以便操作系統重新利用。類似于C語言的堆棧管理,在JavaScript中,當正常退出一個執行環境時就滿足類似的條件。此時,作用域鏈結構中的活動對象及在該執行環境中創建的任何對象(包括函數對象),都不再“可引用”,因此將成為垃圾回收的目標。
上例中,由于getV變量引用了testClosure方法返回的內部getValue方法,因此testClosure執行環境中的變量,以及所創建的Function對象等都不會被垃圾回收,仍然可以通過所引用的變量訪問到testClosure方法所定義的內部全局變量。
轉載于:https://www.cnblogs.com/myjavait/archive/2009/03/13/2142584.html
總結
- 上一篇: Silverlight中全屏处理
- 下一篇: 图灵2008年12月出版的计算机图书