`
mineral
  • 浏览: 287696 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[10Minutes]闭包:基本概念

阅读更多

闭包:基本概念

闭包是可以包含自由(未绑定)变量的代码块;这些变量不是在这个代码块或者任何全局上下文中定义的,而是在定义代码块的环境中定义。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量的存在,相关变量引用没有释放)和为自由变量提供绑定的计算环境(作用域)。在 Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby 和 Python 等语言中都能找到对闭包不同程度的支持。

闭包的价值在于可以作为函数对象 或者匿名函数,对于类型系统而言这就意味着不仅要表示数据还要表示代码。支持闭包的多数语言都将函数作为第一级对象,就是说这些函数可以存储到变量中、作为参数传递给其他函数,最重要的是能够被函数动态地创建和返回。

Closure (computer science)

From Wikipedia, the free encyclopedia

In computer science, a closure is a first-class function with free variables that are bound in the lexical environment. Such a function is said to be "closed over" its free variables. A closure is defined within the scope of its free variables, and the extent of those variables is at least as long as the lifetime of the closure itself. The explicit use of closures is associated with functional programming and with languages such as ML and Lisp. Closures are used to implement continuation passing style, and in this manner, hide state. Constructs such as objects and control structures can thus be implemented with closures.

The concept of closures was developed in the 1960s and was first fully implemented as a language feature in the programming language Scheme. Since then, many languages have been designed to support closures.

In some languages, a closure may occur when a function is defined within another function, and the inner function refers to local variables of the outer function. Atruntime, when the outer function executes, a closure is formed, consisting of the inner function’s code and references to any variables of the outer function required by the closure; such variables are called the upvalues of the closure.

The term closure is often mistakenly used to mean anonymous function. This is probably because most languages implementing anonymous functions allow them to form closures and programmers are usually introduced to both concepts at the same time. These are, however, distinct concepts.

Closures are closely related to function objects; the transformation from the former to the latter is known as defunctionalization or lambda lifting.

 

 

分享到:
评论

相关推荐

    Python闭包:深入理解与应用场景解析.zip

    python通过本文的介绍,你应该对Python中的闭包有了更深入的理解,并能够开始探索如何在你的项目中应用这一特性。掌握闭包的使用,可以帮助你编写出更加强大和灵活的程序。

    闭包:UIKit和Foundation的Swifty闭包

    闭包:UIKit和Foundation的Swifty闭包

    10-作用域链和闭包:代码中出现相同的变量,JavaScript引擎是如何选择的?_For_vip_user_0011

    在上篇章中我们讲到了什么是作域,以及ES6是如何通过变量环境和词法环境来同时持变量提升和块级作域,在最后我们也提到了如何通过词法环境和变量环境来查找变量,这其中

    闭包:序列化闭包(匿名函数)

    Opis封闭可序列化的闭包Opis Closure是一个库,旨在通过提供使所有闭包可序列化的包装器来克服PHP在闭包序列化方面的限制。 该库的主要功能: 序列化任何关闭序列化任意对象不使用eval进行闭包序列化或反序列化可与...

    传递闭包:传递闭包-matlab开发

    % 该函数对输入路径矩阵‘m’执行传递闭包, % 这是一个有向无环图 (DAG), % 使用简单的矩阵乘法方法。 % 例子: % 输入:m = [ 0 1 0; 1; 0]; % 输出:m = [ 0 1 1; 1; 0];

    MATLAB 语言中的闭包:MATLAB 语言中的闭包演示-matlab开发

    闭包是计算机科学中的一个概念,它描述了一个函数的执行,该函数从封闭的范围内私下捕获了变量。 通过嵌套函数和函数句柄,用户可以在 MATLAB 中创建闭包。 通过私下捕获变量,闭包可以帮助程序员避免维护全局状态...

    闭包概念原理

    闭包(closure)。闭包其实大家都已经谈烂了。尽管如此,这里还是要试着从理论角度来讨论下闭包,看看ECMAScript中的闭包内部究竟是如何工作的

    Java闭包 Java闭包

    在2013年发布的 JavaSE8 中包含一个叫做 Lambda Project 的计划,在 JSR-335 草案 中有描述。 JSR-335 将闭包引入了 Java 。闭包在现在的很多流行的语言中都存在,...而且将试着放一些样例程序来解释一些概念和语法。

    关系概念、传递闭包概念及warshall算法c++程序

    在初学离散数学关系概念、传递闭包概念及warshall算法时,总感觉理论缺乏实例,难以理解,本资源收集了一篇短文,讲清了概念,我结合实例编了c++程序,觉得清晰多了,供大家参考

    离散数学-关系,集合,求自反闭包,对称闭包,传递闭包

    离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包...

    终极Rust 2:中级概念

    这是《终极Rust 2:中级概念》(流行的终极Rust速成课程的后续)的配套存储库。UR2IC于2021年下半年在网上独立发布,也将作为O'Reilly一些虚拟活动的一部分进行现场展示,如3周内的Rust活动,或为企业培训进行亲自授课...

    关系闭包的计算

    实验目的:熟悉warshall算法,掌握求关系的自反闭包,对称闭包和传递闭包的方法。 实验内容:从键盘输入一个关系的关系矩阵,自动求出自反闭包、对称闭包和传递闭包。 计算传递闭包用Warshall算法。 #include...

    数据库求属性集闭包&函数依赖闭包

    3) 计算属性集闭包的算法,在课件里有详细说明。方法很简单,但用文字描述很抽象。。。。不解释。。。 4) 计算函数依赖的闭包。此步骤不作要求,但要会方法。个人总结:将所有属性元素组成一个集合(域)记为R;...

    understandingClosures:通过解释闭包所依赖的基本概念的一系列脚本来理解闭包

    了解闭包通过解释闭包所依赖的基本概念的一系列脚本来理解闭包主题目录包含 10 个脚本,涵盖了闭包功能所必需的每个主题,逐渐构建到对闭包的理解: 主题 01 - 输入 Javascript 话题 02 - Javascript 中的函数话题 ...

    跨越边界:闭包

    一些人认为闭包带给编程语言的额外复杂性并不划算。他们的论点是:为了闭包带来的一点点便利而打破原有语法糖的简洁性非常不值得。其他一些人则认为闭包将引发新一轮模式设计的潮流。闭包是可以用作函数参数和方法...

    内存泄露,闭包 内存泄露,闭包 内存泄露,闭包

    内存泄露,闭包 内存泄露,闭包 内存泄露,闭包

    JS匿名函数、闭包

    使用闭包可以在JavaScript中模仿块级作用域(JavaScript本身没有块级作用域的概念),要点如下: 创建并立即调用一个函数,这样既可以执行其中的代码,又不会在内存中留下对该函数的引用; 结果就是函数内部的所有...

    C语言实现三种闭包算法(传递,自反,对称闭包)

    C语言实现三种闭包算法,能够实现传递,自反,对称闭包

    第6章 JS基础-作用域和闭包【三座大山之二,不会闭包,基本不会通过】.rar

    第6章 JS基础-作用域和闭包【三座大山之二,不会闭包,基本不会通过】.rar

    JS中的闭包理解。。。。。。。。

    这就是“闭包”的概念。 • 每当外部封闭函数执行的时候就产生了闭包,也就是说闭包的创建并不一定需要内部函数返回。 • JavaScript中闭包作用域是词法作用域,即它在代码写好之后就被静态决定了它的作用域。

Global site tag (gtag.js) - Google Analytics