什么是闭包(Closure)?
闭包(Closure)
可以保留局部变量不被释放的代码块,被称为一个闭包
闭包的概念比较抽象,相信大家都或多或少知道、用到这个特性
那么闭包到底能给我们带来什么好处?
先来看一下如何创建一个闭包:
|
makeCounter
这个函数的代码块,在返回的函数中,对局部变量 k
,进行了引用,导致局部变量无法在函数执行结束后,被系统回收掉,从而产生了闭包。而这个闭包的作用就是,“保留住“ 了局部变量,使内层函数调用时,可以重复使用该变量;而不同于全局变量,该变量只能在函数内部被引用。
换句话说,闭包其实就是创造出了一些函数私有的 ”持久化变量“。
所以从这个例子,我们可以总结出,闭包的创造条件是:
- 存在内、外两层函数
- 内层函数对外层函数的局部变量进行了引用
闭包的用途
闭包的主要用途就是可以定义一些作用域局限的持久化变量,这些变量可以用来做缓存或者计算的中间量等等。
|
上面例子是一个简单的缓存工具的实现,匿名函数创造了一个闭包,使得 store
对象 ,一直可以被引用,不会被回收。
闭包的弊端
持久化变量不会被正常释放,持续占用内存空间,很容易造成内存浪费,所以一般需要一些额外手动的清理机制。
摘选自:http://taobaofed.org/blog/2017/03/16/javascript-functional-programing/
什么是闭包(Closure)?相关推荐
- Scala编程之闭包(closure)
一.概念 闭包:我们把一个函数与其相关引用环境(变量)组合成一个整体叫做闭包 概念晦涩难懂,下面我们用一个例子说明 二.小例子 def minusxy(x:Int) = (y:Int)=>x-y ...
- [转载]深入理解JavaScript闭包(closure)
最近在网上查阅了不少Javascript闭包(closure)相关的资料,写的大多是非常的学术和专业.对于初学者来说别说理解闭包了,就连文字叙述都很难看懂.撰写此文的目的就是用最通俗的文字揭开Java ...
- 【Groovy】闭包 Closure ( 闭包的 delegate 代理策略 | OWNER_FIRST | DELEGATE_FIRST | OWNER_ONLY | DELEGATE_ONLY )
文章目录 一.闭包的代理策略引入 二.闭包的四种代理策略 一.闭包的代理策略引入 分别在 Groovy 脚本 和 Test 类中定义 fun 方法 , 打印不同的内容 ; 在闭包 Closure 中分 ...
- 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员赋值及源码分析 )
文章目录 总结 一.闭包类 Closure 简介 二.闭包类 Closure 中 this.owner.delegate 成员 源码分析 三.分析编译后的字节码文件内容 总结 在闭包中 , 打印 th ...
- 【Groovy】闭包 Closure ( 闭包参数绑定 | curry 函数 | rcurry 函数 | ncurry 函数 | 代码示例 )
文章目录 一.闭包参数绑定 1.闭包参数绑定 curry 函数 2.闭包参数绑定 rcurry 函数 3.闭包参数绑定 ncurry 函数 二.完整代码示例 一.闭包参数绑定 闭包 Closure 提 ...
- 【Groovy】闭包 Closure ( 闭包参数列表规则 | 默认参数列表 | 不接收参数 | 接收自定义参数 )
文章目录 一.闭包参数列表 二.闭包参数列表代码示例 一.闭包参数列表 闭包的参数设置有如下情况 : 不接收参数 : 如果在定义闭包时 , 只写了 " -> " 符号 , 没 ...
- 【Groovy】闭包 Closure ( 闭包调用 | 闭包默认参数 it | 代码示例 )
文章目录 一.调用闭包 二.闭包默认参数 it 三.代码示例 一.调用闭包 执行 Closure 变量 的 call() 方法 , 可以调用该闭包 ; // 定义闭包变量def closure = { ...
- 【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )
文章目录 一.闭包定义 二.闭包类型 三.查看编译后的字节码文件中的闭包类型变量 一.闭包定义 闭包 Closure 是 Groovy 中最常用的特性 , 使用闭包作为参数是 Groovy 语言的明显 ...
- Kettle使用_16 闭包Closure Generator树形数据
Kettle使用_16 闭包Closure Generator树形数据 需求: 通过Kettle的组件实现对树形结构数据的深度(层次)的生成. 解决方法:结合闭包Closure Generator.排 ...
- javascript中的闭包closure详解
文章目录 简介 函数中的函数 Closure闭包 使用闭包实现private方法 闭包的Scope Chain 闭包常见的问题 闭包性能的问题 总结 简介 闭包closure是javascript中一 ...
最新文章
- UC伯克利最新深度强化学习课程上线,视频已上传到B站
- JVM-class文件完全解析-方法表集合
- 1.01 与 37.8
- cuda nvcc版本不一致_入坑第一步:Win10安装cuda+cuDNN+TensorFlow-GPU走过的那些路
- Detected call of `lr_scheduler.step()` before `optimizer.step()`.
- 机器学习爬大树之(GBDT原理)--二分类篇
- 字节JAVA研发面试
- a标签的href属性
- 实验七 数据选择器和译码器的应用
- Python机器学习之决策树(使用西瓜数据集构建决策树,并将其可视化,graphviz程序下载)
- 微信没有回车键怎么换行_怎么换行-回答 | 为什么苹果的微信没有换行键,想换行怎么办?...
- ucore lab2
- 鼠标式光流传感器与多传感器融合
- 1088: 手机短号 (多实例)C语言
- uni-app如何自定义内容生成二维码?
- 深入理解java虚拟机 (周志明)JVM个人总结
- 计算机应用基础第1版前言,《计算机应用基础课件》前言
- 你是个年轻人,请你好好生活
- 中国地址选择xml 文件
- DS||dfs and bfs