博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
闭包--循序学习
阅读量:6422 次
发布时间:2019-06-23

本文共 852 字,大约阅读时间需要 2 分钟。

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

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

转载地址:http://rrgra.baihongyu.com/

你可能感兴趣的文章
Sharepoint学习笔记—Debug&TroubleShooting--工具清单
查看>>
Jenkins FQA
查看>>
ORACLE学习笔记--性能优化4
查看>>
百度之星 / 初赛第二场 B题
查看>>
WSUS完全部署
查看>>
java foreach循环为什么不能赋值
查看>>
AD用户登录验证,遍历OU(LDAP)
查看>>
Configuration
查看>>
ContextLoaderListener作用详解
查看>>
记一次dedeCMS网站搭建全过程
查看>>
算法与数据结构(十六) 快速排序(Swift 3.0版)
查看>>
K-近邻算法的Python实现 : 源代码分析
查看>>
【BootStrap】 布局组件 I
查看>>
Http压测工具wrk使用指南
查看>>
JavaScript数组方法说明
查看>>
Netscaler GSLB的主备数据中心解决方案
查看>>
大数据平台网站日志分析系统
查看>>
Xilinx-7Series-FPGA高速收发器使用学习—RX接收端介绍
查看>>
Java String练习题及答案
查看>>
使用SVD方法实现电影推荐系统
查看>>