上個月,淡丶無欲 讓我寫一期關于 閉包 的隨筆,其實慚愧,我對閉包也是略知一二 ,不能給出一個很好的解釋,擔心自己講不出個所以然來。 所以帶著學習的目的來寫一寫,如有錯誤,忘不吝賜教 。
為什么要有閉包?
初識閉包時,,我一直在想,為什么只有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); } } }
網友評論