学习javascript的闭包特性用C#来实现一个简单的例子

闭包总是搞不太懂,而且网上各说风云,还是先参考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。

posted @ 2013-06-11 11:44  nickycookie  阅读(220)  评论(0编辑  收藏  举报