闭包总是搞不太懂,而且网上各说风云,还是先参考Javascript高级程序设计第三版里的定义来理解吧。
定义:闭包是指有权访问另一个函数作用域中的变量 的 函数
Javascript中具体是通过作用域链来实现闭包的,具体大家可以参考其它文章,我目前也是一知半解,而且即使当前看懂了,但看过就忘了。。。脑子搓没办法。
接下来我用C#做个简单的理解,仅算是抛砖引玉吧。
1 public delegate bool Compare(Person p1, Person p2); 2 class Program 3 { 4 static void Main(string[] args) 5 { 6 Person p1 = new Person(); 7 p1.values.Add("name", 30); 8 Person p2 = new Person(); 9 p2.values.Add("name", 20); 10 Compare compare = CreateCompareFunction("name"); 11 bool result = compare(p1, p2); 12 compare = null; 13 } 14 15 static Compare CreateCompareFunction(string name) 16 { 17 return ((p1, p2) => { return p1.values[name] > p2.values[name]; }); 18 } 19 } 20 21 public class Person 22 { 23 public Dictionary<string, int> values = new Dictionary<string, int>(); 24 }
第10行获得内部匿名函数的指针后,调用方法时能够访问外部函数的变量name。