闭包--循序学习

简介: 感觉似懂非懂的概念,这里记录理解进程。 1.javascript的闭包 参考:百度百科。 什么是闭包 “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

感觉似懂非懂的概念,这里记录理解进程。

1.javascript的闭包

参考:百度百科

什么是闭包
“官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
相信很少有人能直接看懂这句话,因为他描述的太学术。我想用如何在Javascript中创建一个闭包来告诉你什么是闭包,因为跳过闭包的创建过程直接理解闭包的定义是非常困难的。看下面这段

代码

1
2
3
4
5
6
7
8
9
function  a(){
var  i=0;
function  b(){
alert(++i);
}
return  b;
}
var  c=a();
c();

特点

这段代码有两个特点:
1、函数b嵌套在函数a内部;
2、函数a返回函数b。
这样在执行完var c=a( )后,变量c实际上是指向了函数b,再执行c( )后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:
当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。

作用

简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制 GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。这是对闭包作用的非常直白的描述,不专业也不严谨,但大概意思就是这样,理解闭包需要循序渐进的过程。
在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。
那 么我们来想象另一种情况,如果a返回的不是函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引 用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被 GC回收。(关于Javascript的垃圾回收机制将在后面详细介绍)




唯有不断学习方能改变! -- Ryan Miao
目录
相关文章
|
25天前
|
设计模式 JavaScript 前端开发
js开发:请解释闭包(closure)是什么,以及它的用途。
闭包是JavaScript中的关键特性,允许函数访问并操作外部作用域的变量,常用于实现私有变量、模块化和高阶函数。私有变量示例展示了如何创建无法外部访问的计数器;模块化示例演示了封装私有变量和函数,防止全局污染;高阶函数示例则说明了如何使用闭包创建能接收或返回函数的函数。
14 2
|
3月前
|
缓存 JavaScript 前端开发
|
4月前
|
人工智能 自然语言处理 前端开发
闭包是什么?闭包的用途是什么?
闭包是什么?闭包的用途是什么?
|
8月前
|
自然语言处理 JavaScript 前端开发
JavaScript 实践+理论(总结篇):作用域、闭包、this、对象原型(上)
JavaScript 实践+理论(总结篇):作用域、闭包、this、对象原型
|
9月前
|
安全 Python
Python闭包与闭包陷阱
在 Python 中,闭包是一种特殊的函数,它能够记住它所在的环境(也称作上下文)。这意味着闭包能够访问定义它的作用域中的变量。闭包通常用于封装数据和提供对外部访问的接口。
|
12月前
|
前端开发 JavaScript
都2020年了,你还不懂什么是闭包吗---深入理解闭包这一篇文章足以
都2020年了,你还不懂什么是闭包吗---深入理解闭包这一篇文章足以
57 0
|
前端开发
前端学习案例1-闭包定义
前端学习案例1-闭包定义
38 0
前端学习案例1-闭包定义
什么是闭包?闭包的用途是什么?闭包的缺点是什么?
变量的作用域有两种:全局变量和局部变量; 函数内部可以直接读取全局变量; 在函数外部无法读取函数内的局部变量。 能够读取其他函数内部变量的函数,就是闭包
86 0
|
自然语言处理
闭包的原理跟作用
闭包的原理跟作用
114 0
|
自然语言处理 JavaScript 前端开发
每日一题:说说你对闭包的理解?闭包使用场景
每日一题:说说你对闭包的理解?闭包使用场景
89 0