一、闭包

  好长时间对于闭包都知道与函数和其环境变量有关系,但是一直没有一个清晰的认识。今天查看了一下维基百科,顺便写下来。

二、闭包的定义

  在编程语言中,闭包(语义闭包或函数闭包)是指哪些可以将语义范围内命名变量 绑定到语言的一类对象-------函数。操作上,一个闭包就是一条存储着 函数和其环境变量 的记录:映射着 函数的变量(变量在本地使用,但是在闭包环境中定义) 和 值或者引用(其名称在闭包创建时就进行绑定)。一个闭包(和普通函数不一样)允许函数访问 其引用的变量(通过闭包拷贝其值和应用),甚至当函数在其范围以外调用。

三、样例

下面的程序代码片定义了一个高阶函数----startAt(x) 和其嵌套函数------incrementBy(y)。嵌套函数incrementBy在其内部可以访问x,尽管x变量不是本地定义,但是其在x的词法范围内。函数startAt(x)返回的是闭包,包含一份x的 值 或 其在startAt调用中x的引用 的拷贝,函数 incrementBy()的内容的拷贝

function startAt(x)
function incrementBy(y)
return x + y
return incrementBy variable closure1 = startAt()
variable closure2 = startAt()

注意:由于startAt()返回的是一个函数,所以上述例子closure1 和 closure2 也是函数类型的,可以像函数一样使用。虽然他们返回都是相同的函数incrementBy,但是其相关联的环境不同。

浅谈闭包(Closure)的更多相关文章

  1. IOS 浅谈闭包block的使用

    前言:对于ios初学者,block通常用于逆向传值,遍历等,会使用,但是可能心虚,会感觉block很神秘,那么下面就一起来揭开它的面纱吧. ps: 下面重点讲叙了闭包的概念,常用的语法,以及访问变量, ...

  2. [iOS、Unity、Android] 浅谈闭包的使用方法

    前言 我们经常所编程语言的的进步速度是落后于硬件的发展速度的. 但是最近几年,闭包语法在各个语言中都有自己的体现形式,例如 • C语言中使用函数指针作为回调函数的入口: • Java和C#语言中的La ...

  3. Python核心编程 | 浅谈闭包的使用

    1.函数的引用   >>> def test(): print('test:') >>> test <function test at 0x10ffad488 ...

  4. 【Unity游戏开发】浅谈Lua和C#中的闭包

    一.前言 目前在Unity游戏开发中,比较流行的两种语言就是Lua和C#.通常的做法是:C#做些核心的功能和接口供Lua调用,Lua主要做些UI模块和一些业务逻辑.这样既能在保持一定的游戏运行效率的同 ...

  5. 浅谈JavaScript中的闭包

    浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...

  6. 浅谈JS中的闭包

    浅谈JS中的闭包 在介绍闭包之前,我先介绍点JS的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...

  7. 浅谈 .NET 中的对象引用、非托管指针和托管指针 理解C#中的闭包

    浅谈 .NET 中的对象引用.非托管指针和托管指针   目录 前言 一.对象引用 二.值传递和引用传递 三.初识托管指针和非托管指针 四.非托管指针 1.非托管指针不能指向对象引用 2.类成员指针 五 ...

  8. 开发技术--浅谈Python函数

    开发|浅谈Python函数 函数在实际使用中有很多不一样的小九九,我将从最基础的函数内容,延伸出函数的高级用法.此文非科普片~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点 ...

  9. laravle6.0-IOC-DI浅谈

    1.什么是IOC,DI IOC(Inversion of Control)控制反转:ioc意味着,你将自己设计好的对象交给容器来控制,而不是传统的在你的对象内部直接控制.比如: 人 操控 手机 做一些 ...

随机推荐

  1. 2017ACM/ICPC Guangxi Invitational Solution

    A: A Math Problem 题意:给出一个n,找出有多少个k满足kk  <= n 思路: kk的增长很快,当k == 16 的时候就已经超过1e18 了,对于每一次询问,暴力一下就可以 ...

  2. Python3 pandas用法大全

    Python3 pandas用法大全 一.生成数据表 1.首先导入pandas库,一般都会用到numpy库,所以我们先导入备用: import numpy as np import pandas as ...

  3. LA 2963 超级传输(扫描)

    https://vjudge.net/problem/UVALive-2963 题意:需要在n个星球上各装一个广播装置,作用范围均为R.每个星球广播A类节目或者B类节目.a表示星球i收听到的和自己广播 ...

  4. IIS Express 添加MIME映射

    IIS Express没有提供图形化界面来配置MIME类型,但提供了配置MIME类型的命令行工具. IIS Express中添加MIME映射.操作如下: 在DOS窗口下进入IIS Express安装目 ...

  5. Linux的硬链接和软链接

    1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link), 也就是软链接.默认情况下,ln命令产生硬链接. [硬连接]硬连 ...

  6. JavaScript获取输入框内容

    html: <input name="money" type="number" placeholder="税前工资"><b ...

  7. 将 R 整合到 markdown 中

    markdown 易于写入和读取,具有编写报告的必要功能,例如简单的文本格式,嵌入图片.链接.表.引用.数学公式以及代码块.虽然在 markdown 中编写纯文本很容易,但是创建具有许多图片和表格的报 ...

  8. [原][osg][osgearth]我眼中的osgearth

    看了一下,OE生成的可执行文件 除了osg库和第三方库 OE生产最多的dll就是 osgdb_osgearth_XXXX.dll了 这些都是为了通过osgDB机制加载earth的数据用的. 所以,我觉 ...

  9. 【Python】模块学习之matplotlib柱状图、饼状图、动态图及解决中文显示问题

    前言 众所周知,通过数据绘图,我们可以将枯燥的数字转换成容易被人们接受的图表,从而让人留下更加深刻的印象.而大多数编程语言都有自己的绘图工具,matplotlib就是基于Python的绘图工具包,使用 ...

  10. Spring IOC 源码简单分析 02 - Bean Reference

    ### 准备 ## 目标 了解 bean reference 装配的流程 ##测试代码 gordon.study.spring.ioc.IOC02_BeanReference.java   ioc02 ...