About Me

我的相片
Mr. Pigg
Taipei, Taiwan
檢視我的完整簡介

星期二, 3月 04, 2008

Javascript Closure 的概念與應用

最近讀到了javascript closure
搞得有點一頭霧水,Google了一陣子之後
總算有點瞭解,在這邊做點記錄

  1. 概念
    在函數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仍然持續存在

  2. 特性
    - 不同次呼叫的closure,local變數為個自的,而同次呼叫的則共用
    - 使用時要特別注意哪些屬於closure變數哪些不是
    - closure變數的值決定於return當時(或是呼叫執行)的狀態(binding value), 而非宣告當時


  3. 作用
    • 可模擬私有變數,因為變數i只有透過b()才可更改
    • 當需要一個持續存在的變數時,可以避免使用廣域變數影響命名空間
    • breakpoint追蹤目前變數情況

  4. 參考資源
    Javascript Closures
    http://www.javascriptkit.com/javatutors/closures.shtml

0 意見: