学习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。

你可能感兴趣的:(JavaScript)