【web前端】JavaScript闭包
example:
var generateClosure = function(){
var count = 0;
var get = function(){
count++;
return count;
};
return get;
};
var counter = generateClosure();
console.log(counter()); //输出1
console.log(counter()); //输出2
console.log(counter()); //输出3
这段代码中,generateClosure()函数中有一个局部变量count,初值为0。还有一个叫做get的函数,get将其父作用域,也就是generateClosure()函数中的count变量增加1,并返回count的值。generateClosure()的返回值是get函数。在外部我们通过counter变量调用了generateClosure()函数并获取了它的返回值,也就是get函数,接下来反复调用几次counter(),我们发现每次的值都递增了1。
让我们看看上面的例子有什么特点,按照通常命令式编程思维的理解,count是generateClosure()函数内部的变量,它的生命周期就是generateClosure()被调用的时期,当generateClosure()从调用栈中返回时,count变量申请的空间也就被释放。问题是,在generateClosure()调用结束后,counter()却引用了“已经释放了的”count变量,而且非但没有出错,反而每次调用counter()时还修改并返回了count。这是怎么回事呢?
这正是所谓闭包的特性。当一个函数返回它内部定义的一个函数时,就产生了一个闭包,闭包不但包括被返回的函数,还包括这个函数的定义环境。上面例子中,当函数generateClosure()的内部函数get被一个外部变量counter引用时,counter和generateClosure()的局部变量就是一个闭包。
example:
var generateClosure = function{
var count = 0;
var get = function(){
count++;
return count;
};
return get;
};
var counter1 = generateClosure();
var counter2 = generateClosure();
console.log(counter1()); //输出1
console.log(counter2()); //输出1
console.log(counter1()); //输出2
console.log(counter1()); //输出3
console.log(counter2()); //输出2
转载于:https://www.cnblogs.com/tanghulu/p/7755270.html
【web前端】JavaScript闭包相关推荐
- Web前端-JavaScript基础教程上
Web前端-JavaScript基础教程 将放入菜单栏中,便于阅读! JavaScript是web前端开发的编程语言,大多数网站都使用到了JavaScript,所以我们要进行学习,JavaScript ...
- Web前端JavaScript笔记(4)节点
如何获取元素节点的属性: 在Web前端JavaScript笔记(3)对象中,介绍了访问行间属性的方法,除此之外,系统还提供了三个方法访问元素的属性: 1. setAttribute: 2. getAt ...
- Web前端-JavaScript基础教程下
Web前端-JavaScript基础教程下 <script>有6个属性: async对外部脚本有效,可以用来异步操作,下载东西,不妨碍其他操作. charset为src属性指定字符集. d ...
- web前端JavaScript嵌入百度地图API的方法 最详细
web前端JavaScript嵌入百度地图API最详细的方法 一.申请成为百度开发者,获得使用地图API接口的权限,获取(AK)码. 二.实现首图效果(可以参考开发者指南) 1. 根据Hello Wo ...
- Web前端Javascript笔记(6)正则表达式
在web前端中,假设用户需要提交表单,在表单提交到服务器进一步处理之前,Javascript程序会检查表单,以确认用户输入的信息是符合规范要求的.这些工作可以使用正则表达式完成,正则表达式是一个描述字 ...
- web前端JavaScript程序员必学技术指南
JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...
- Web前端——JavaScript(bom文档对象模型)
>window对象 是bom的顶层对象,其中包含document对象: Window 对象表示浏览器中打开的窗口. 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML ...
- Web前端Javascript笔记(8)Ajax前后端交互
认识Ajax 全名Asynchronous Javascript and XML(异步JavaScript和XML),节省用户操作时间,提高用户体验,减少数据请求,传输获取数据.Ajax相当于前后台数 ...
- Web前端Javascript笔记(5)事件
1. 什么是事件:事件是指发生并得到处理的操作 JavaScript中的事件是由访问web页面的用户引起的一系列操作,例如,用户的点击操作,JavaScript中有两种事件模型:内联模型,脚本模型. ...
- Web前端 Javascript笔记(1)数组
结构 :html构建 样式:css控制 行为:JavaScript实现 什么是JavaScript? JavaScript是一种跨平台的脚本语言,平台,即运行环境,一般指操作系统. --------- ...
最新文章
- CSR稀疏矩阵存储方式
- 『第12天』从ipc$ 连接失败讲起
- 《博德之门 3》究竟有多「DnD」?
- linux 设置中文版man手册
- warning modified in the future
- 利用 Flash 远程检测客户端安装的杀软
- Azure 命令行工具大混战,都是什么,该选哪个?
- PPC WM5 输入法屏蔽插件
- canvas绘制验证码
- 二级C语言选择题分类,全国计算机等级考试二级C语言填空与选择题简单分类.doc...
- MapXtreme实用技巧
- layui上传多张图片
- 南航计算机院招聘,2018南航计算机专硕我考上啦!
- 监督学习之分类学习:线性分类器
- android ui组件 推荐,GitHub - zzti/XUI: 一个简洁而优雅的Android原生UI框架,解放你的双手!...
- 【Python】《Python网络爬虫权威指南》第三章任务:验证六度分隔理论
- Xcode中蓝色和黄色文件夹的区别
- MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据
- 录制动画时AnimationClip.SetCurve的relativePath问题
- Qt软键盘使用和修改软键盘参数 支持中文
热门文章
- 剑指 Offer II 092. 翻转字符
- 传统梯度下降法面临的挑战
- 第三章CDMA的原理与应用(2)
- 安卓的起源是linux么,最后的起源安卓版下载-最后的起源下载v2.1.9-Linux公社
- OpenCV-Python教程(7、Laplacian算子)
- MapReduce输出结果到多个文件
- 凸优化学习笔记(五):凸优化算法、无约束优化算法、有约束优化算法
- λ^n |λI−AB|= λ^m |λI−BA|
- 原生php phpmailer 发送邮件 email
- 2-机器学习入门-读书笔记