JavaScript之坑了我--閉包原理不過如此
上班過程中有沒有遇到這種程式設計需求?
function show(){
var count = 10;
}
show();//執行
上面的程式碼中,如果我要操縱區域性變數count的話,我們應該怎麼辦??我們沒辦法,因為當show()執行完畢後,區域性變數count就會被回收,我們根本無法獲取之。
閉包的產生,就是為我們提供了操縱函式區域性變數的方式!是不是很神奇?這在java中是我沒有看見過的。
分析:
我們知道,計算機中的記憶體變數如果有被引用著的話,則系統是不會將之回收的。只要我們能夠一直持有這個引用,則就可以令區域性變數避免被回收——這是閉包概念成立的前提。
我們改造show函式:
function show(){
var count = 10;
function getCount(){ //宣告一個區域性函式物件,相當於:
// var getCount = new Function(“console.log(count++);”);
console.log(count++);
}
return getCount; //將函式物件首地址返回。
}
var showCount = show(); // 賦值給showCout
//我們多次呼叫 showCount()……
showCount(); //列印10
showCount(); //列印11
showCount(); //列印12
showCount(); //列印13
// 由上,從10 ….. 13, 我們可以知道count在show()執行完畢後沒有被回收,否則也// 不會每次都遞增1.
// 於是我們就將區域性變數保留了下來。。。。。。
分析:由於showCount引用了getCount,則getCount不會被回收,因此,getCount內的引用的變數(當然這個變數不是getCount中執行才宣告的區域性變數)也不會被回收。
不過,這裡,注意一點(盲區):
function show(){
var count = 10;
return count ;
}
var x = show();//僅僅是將count的值賦給x,而count已被回收。傳值!!
請勿與上面的混淆了!!!!!來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29900383/viewspace-1827382/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript之坑了我--事件繫結原理JavaScript事件
- JavaScript之坑了我--閉包助力OOP之模擬私有成員屬性JavaScriptOOP
- JavaScript之坑我--陣列原理探析JavaScript陣列
- JavaScript之閉包JavaScript
- JavaScript之坑了我--BOM模型速知JavaScript模型
- JavaScript之坑了我--事件模型細節JavaScript事件模型
- JavaScript之坑了我--定時器用法JavaScript定時器
- JavaScript之坑了我--函式細節JavaScript函式
- JavaScript之坑了我--物件導向預熱JavaScript物件
- JavaScript之坑了我--JSON物件明析JavaScriptJSON物件
- JavaScript深入之閉包JavaScript
- JavaScript 深入之閉包JavaScript
- 【初窺javascript奧秘之閉包】葉大俠病都好了,求不踩了:)JavaScript
- javascript之溫習閉包JavaScript
- JavaScript閉包原理與用法例項JavaScript
- 什麼是過時閉包及如何解決過時閉包的坑
- JavaScript閉包JavaScript
- JavaScript 閉包JavaScript
- JavaScript - 閉包JavaScript
- 進擊的 JavaScript(四) 之 閉包JavaScript
- 深入淺出JavaScript之閉包(Closure)JavaScript
- JavaScript之坑了我--instanceof的判斷機制測試JavaScript
- [JavaScript閉包]Javascript閉包的判別,作用和示例JavaScript
- 閉包 | 淺談JavaScript閉包問題JavaScript
- JavaScript之坑了我--一張圖看盡原型及底層模擬JavaScript原型
- 理解JavaScript 閉包JavaScript
- JavaScript 清除閉包JavaScript
- JavaScript 的閉包JavaScript
- JavaScript-閉包JavaScript
- 解密JavaScript閉包解密JavaScript
- Javascript 閉包(Closures)JavaScript
- 理解 JavaScript 閉包JavaScript
- Javascript閉包(Closure)JavaScript
- 面試官問我:什麼是JavaScript閉包,我該如何回答面試JavaScript
- JavaScript 閉包基本指南JavaScript
- JavaScript 閉包那些事JavaScript
- 理解Javascript的閉包JavaScript
- JavaScript閉包詳解JavaScript