上个月,淡丶无欲 让我写一期关于 闭包 的随笔,其实惭愧,我对闭包也是略知一二 ,不能给出一个很好的解释,担心自己讲不出个所以然来。 所以带着学习的目的来写一写,如有错误,忘不吝赐教 。
为什么要有闭包?
初识闭包时,,我一直在想,为什么只有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);
}
}
}网友评论

