最近讀到了javascript closure
搞得有點一頭霧水,Google了一陣子之後
總算有點瞭解,在這邊做點記錄
- 概念
在函數a之中宣告的內部函數b,此內部函數b可讀取該函數a的區域變數
即使a已經離開他的scope.
function a() {
var i=0;
function b(){
alert(++i);
}
return b;
}
var c = a();
c();c();c();
以上例而言,會得到0,1,2,表示即使var c=a() 結束之後,a的區域變數i仍然持續存在 - 特性
- 不同次呼叫的closure,local變數為個自的,而同次呼叫的則共用
- 使用時要特別注意哪些屬於closure變數哪些不是
- closure變數的值決定於return當時(或是呼叫執行)的狀態(binding value), 而非宣告當時 - 作用
- 可模擬私有變數,因為變數i只有透過b()才可更改
- 當需要一個持續存在的變數時,可以避免使用廣域變數影響命名空間
- 做breakpoint追蹤目前變數情況
- 參考資源
Javascript Closures
http://www.javascriptkit.com/javatutors/closures.shtml


0 意見:
張貼留言