总是听说闭包是脚本语言中最难以理解的东西,今天我抽时间对闭包做一个解释,下面是一段百度对闭包的解释:

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

事实上百度已经解释的十分清楚了 ,我仅仅是将这一段概念做一个注解。我们通常所谓的闭包函数到底是怎么样子的?首先作为一个函数,它的形式一定时一个函数的形式:

function(){......
}

其次这个函数内部包含的 是一个变量,而这个变量和对象的变量无关。这样形成了一个含有变量的代码块。你也许会说我擦,这不就是个函数嘛!?别着急对这个函数还有一些特殊的要求:我们要求这个变量不属于代码块,不属于全局变量,而是一个环境变量var,我去,这越来越像一个普通函数了,其实仔细想想没错啊,闭包函数本来就是个函数啊。

不过我们这个时候更应该想到的是脚本的运行机制,通常来书脚本函数在运行之后会释放自己的内存,也就是说每个函数执行完成后,这个函数里的变量就会消失不见,闭包函数就是为了解决这个问题而存在的。闭包要求这个变量不能消失,就是说局部变量是静态的。我该怎么办呢?下面我把这个函数的定义图和实现方法表示出来:

function(){var 不属于代码块,不是全局变量
}
function f1(){function f2(){闭包变量的位置}return f2;
}

 

这张蓝色的图片表示闭包函数调用的一个过程。这下我们拥有了一个永恒存在的变量,我可以在各个地方调用它,是不是方便了很多呢?至于具体怎么应用那就是你的事情了。

转载于:https://www.cnblogs.com/winepastor/p/3760083.html

闭包——抽象解释的简单注释相关推荐

  1. 离散数学,Js 中闭包的解释和联系

    总共分三部分说明闭包问题: (1)部分  转发自: https://blog.csdn.net/wzwdcld/article/details/44783459,如侵权,请告知删除. 二元关系  设S ...

  2. 抽象解释-伽罗瓦连接证明数据流分析的安全性

    文章目录 前言 抽象解释 伽罗瓦连接(Galois Connection) 证明数据流分析的安全性 前言 视频:北大-软件分析-公开课 文档:课件 简单记录下. 抽象解释 在这之前,我们所有的静态分析 ...

  3. 闭包的作用和简单案列

    闭包的作用和简单案例 闭包的定义:闭包就是能够读取其他函数内部变量的函数: 简单的理解为:一个作用域可以访问其他函数内部的局部变量: 常见的方式:一个函数内创建另外一个函数,通过另外一个函数访问这个函 ...

  4. python3闭包通俗解释_Python|闭包、装饰器,简单的实例,通俗的理解

    闭包和装饰器都是属于函数的语法范畴,是在函数定义中以另一个函数做为形参的语法机制. 1 闭包(Closurer) 闭包是定义内部函数的一种语法规则,要理解闭包,请看下面的实例:def outer(t) ...

  5. Spring AOP相关术语解释及简单使用

    什么是面向切面编程 百度百科定义为:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. ...

  6. Gauss-Newton算法代码详细解释(转载+自己注释)

    这篇博客是对[1]中不详细的地方进行细节上的阐述, 并且每句代码都加了注释,使得更加容易理解 下面的论述(包括伪代码和算法)特指被最小化的目标函数是MSE的时候 需要注意,如果不是MSE为目标函数,那 ...

  7. java 抽象工厂模式简单实例

    抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生. 类似于工厂模式:隔离了具体类的生产实现,使得替换具体的工厂实现类很容易.包含有 ...

  8. 简单工厂、工厂方法、抽象工厂、抽象工厂加简单工厂

    简单工厂模式:简单工模式时类的创建模式,又叫做静态工厂方法(static Factory Method).简单工厂模式是一个工厂对象决定创建出哪一种产品类的实例.它存在的目的很简单:定义一个创建对象的 ...

  9. 工厂模式 工厂方法模式 抽象工厂模式 简单工厂模式 工厂模式于抽象工厂的区别 设计模式

    工厂模式 定义一个用于创建对象的接口,让子类实现具体类的创建.工厂将类的实例化延迟的子类. 良好的分装性.对于具体产品,只要知道产品名称即可(类名或字符串),封闭了对产品创建的细节. 屏蔽具体产品类. ...

  10. 函数:全局局部变量、内部函数、闭包 详细解释与传参方法

    函数与过程 大多数语言都会有以下定义: 函数(function):有返回值 过程(procedure):是简单的特殊的没有返回值的一个特殊函数 python中只有函数没有过程. 函数有return的话 ...

最新文章

  1. CVD和ALD薄膜沉积技术应用领域
  2. 提高性能的Varnish缓存方案
  3. 如何利用C#开发“扫雷”小游戏
  4. 不会吧,不会吧,还有人不知道 binlog ?
  5. PHP 10条有用的建议
  6. Handler研究2-AsyncTask,AsyncQueryHandler分析
  7. 《基于张量网络的机器学习入门》学习笔记4
  8. 时间加减计算器_手机上的计算器这样也可以,太方便了,赶快转告家人朋友
  9. Unknown encoder ‘libx264‘的解决方法
  10. TypeScript入门教程 之 Promise
  11. MySQL 创建索引和索引效率验证
  12. java/03/类与对象,深入分析类与对象(权限修饰,构造方法和简单java类),数组的定义及使用
  13. vb.net中如何结束一个线程
  14. rost反剽窃检测系统_个人如何进行毕业论文查重检测?
  15. C++利用前序序列和中序序列构建二叉树
  16. 在韩国5G商用神话中,我们不能学到什么?
  17. 前后端分离实现在线音乐网站-springboot+vue
  18. 如何认识和投身 Web 3.0?
  19. CF赛后总结——一个自闭症患者的心路历程
  20. 【STM32】按键抖动及消除

热门文章

  1. MySQL的my.cnf详细配置说明
  2. Enum定义位域, 即可以通过位操作来产生未命名的值
  3. [转载] 大道至简:软件工程实践者的思想——第八章 你看得到工具的本质吗
  4. 浅谈Hybrid技术的设计与实现
  5. Java获取浏览器请求头(User-Agent),分析浏览器信息,系统信息的几种办法
  6. CentOS 如何修改mysql 用户root的密码
  7. CentOS 7.2下安装lamp环境
  8. 太赞了,竟然用SpringBoot打造一款网页版的IM,进行聊天...
  9. 你被大数据“杀熟”了么?
  10. 027.3 反射技术 简单应用