上個月,淡丶無欲 讓我寫一期關于 閉包 的隨筆,其實慚愧,我對閉包也是略知一二 ,不能給出一個很好的解釋,擔心自己講不出個所以然來。 所以帶著學習的目的來寫一寫,如有錯誤,忘不吝賜教 。

為什么要有閉包?

初識閉包時,,我一直在想,為什么只有JS有閉包,c#,c++ 為什么沒有 ??

1. 封裝局部變量

看下面一個例子,計算 斐波那契 數。
為了能夠重用數據,一個通用做法就是將計算過的數據緩存起來,但緩存的數據對外是不可見的 。
看下面的 c# 代碼 :

public static  class Fibonacci{    public static Fibonacci(){
        cache[0] = 1;
        cache[1] = 1;
    }    private static IList<int> cache = new List<int>(1000,-1);    
    public static int Calc(n){        if(cache[n] != -1){            return cache[n];
        }else{            return cache[n] = Calc(n-1) + Calc(n-2);
        }
    }
}

網友評論