美文网首页
什么是闭包(Closure)?

什么是闭包(Closure)?

作者: JacquesMayol | 来源:发表于2016-10-20 14:29 被阅读0次

如果不用代码来演示,你很难单用话语把它解释清楚

维基百科的解释

在计算机科学中,闭包Closure是词法闭包Lexical Closure)**的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。

So

所以一个闭包就是一个“捕获”或“携带”了其被生成的环境中、所属的变量范围内所引用的所有变量的函数。的确,很难描述,但当你看完了这些代码后,你就很容易理解了。
闭包是由函数和与其相关的引用环境组合而成的实体。算是见到的最简明扼要的闭包解释了。
closure就是把上下文不放到自己域, 比如说一些变量来自稍大或更大的域,但只有运行时才绑定 — 这给闭包函数的编写者带来不小想象空间.

Eg.(C#)

var x = 1;
  Action action = () =>{ 
  var y = 2; 
  var result = x + y; 
  Console.Out.WriteLine("result = {0}", result);
};
action();

Explain

这里我们首先定义了一个变量“x”,值为1。然后我们定义了一个匿名函数(一个lambda表达式)赋给类型Action。Action没有参数,没有返回值,但如果你观察“action”里的定义,你会发现它使用了“x”变量。这是变量是被action“捕获”或“携带”的,自动被添加到了action的运行环境中了。

当我们执行action时,它输出了我们预期的结果。请注意,当我们执行时,原始的“x”此时已经脱离了它当初的变量环境,但它仍然能用。

当你在代码调试器(debugger)里观察“action”时,会发现很有趣的事情。我们可以看到,C#编译器为我们创建了一个Target类,里面封装了x变量:

closure_in_debugger.png

参考 外刊IT评论 - 什么是闭包(Closure)? 感谢分享
英文原文:What is a Closure?

这篇参考的内容写得有点生硬,可以再参考拓展阅读的内容特别是ruanyifeng写的哈,一开始看可能一头雾水多看几遍,理解了就会觉写得很通俗

相关文章

  • 闭包,定时器

    问题 1.什么是闭包? 有什么作用 闭包(英语:Closure),又称词法闭包(Lexical Closure)或...

  • 理解Python闭包

    1.什么是闭包? 维基百科: 在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的...

  • Swift底层进阶--011:闭包

    什么是闭包 维基百科中的解释:在计算机科学中,闭包(Closure),又称词法闭包(Lexical Closure...

  • 关于闭包

    闭包的英文是closure,又称词法闭包(Lexical Closure)和函数闭包(Function Closu...

  • 理解闭包

    闭包 何为闭包 闭包(Closure)是词法闭包(Lexical Closure)的缩写 高级程序设计中写有权访问...

  • 关于rust中的闭包(一)

    闭包 在计算机中,闭包 Closure, 又称词法闭包 Lexical Closure 或函数闭包 functio...

  • Escaping Closures - Swift

    逃逸闭包和非逃逸闭包 逃逸闭包(escaping closure),什么是逃逸闭包?苹果官方给的定义是:当一个闭包...

  • python之闭包与装饰器

    1 闭包 维基百科给出的解析:闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭...

  • [Code] 优雅地使用python闭包

    在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(funct...

  • JavaScript闭包

    什么是闭包? 闭包(closure)我们从汉字的字面意思可以理解为:闭:封闭的 闭合 关闭包:包裹 ...

网友评论

      本文标题:什么是闭包(Closure)?

      本文链接:https://www.haomeiwen.com/subject/vevfuttx.html