JavaScript中的闭包原理分析


Posted in Javascript onMarch 08, 2010

我们来看一个定义:
Closure
所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
这说明了,JavaScript中的闭包是包含了上下文的函数,也就是说,这个函数的作用基础,是它所处的环境,这是不能超越的,跟线性代数是不是有一点似曾相识的感觉呢?
换个角度看,闭包的作用是为了实现OO。JavaScript中,没有像C++那样的public、private、protect属性标识, 建立起类比较困难。“类是带行为的数据,而闭包是带数据的行为”,在JavaScript中我们用函数的定义代替类的定义,用闭包代替了setter/getter方法。请看一段livecode:

function f1(){ 

var n=1; 


function getter(){ 



alert(n); 


} 


return getter; 

}

上文中n的声明和函数getter组成了一个典型的闭包。最终返回的函数,即刚刚所讲的“行为”,其实目的就是为了得到n的值,所以说闭包就是带有数据的行为。
另外,我觉得阮一峰说的闭包也是很简洁的:“我的理解是,闭包就是能够读取其他函数内部变量的函数。”
另一篇更为学术的解释:
http://demo.3water.com/js/javascript_bibao/index.htm
我希望各位能够真正从学术上的定义理解闭包,因为所有对闭包定义的诠释和简化都是对JavaScript的片面解读。
Javascript 相关文章推荐
XML的代替者----JSON
Jul 21 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
Feb 23 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
Jun 05 Javascript
javascript的正则匹配方法学习
Feb 24 Javascript
原生javascript实现分页效果
Apr 21 Javascript
js前端导出Excel的方法
Nov 01 Javascript
微信小程序自动客服功能
Nov 02 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
Jul 22 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
Aug 20 Javascript
JavaScript数组及常见操作方法小结
Nov 13 Javascript
Element Popover 弹出框的使用示例
Jul 26 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
ExtJS GridPanel 根据条件改变字体颜色
Mar 08 #Javascript
JavaScript 滚轮事件使用说明
Mar 07 #Javascript
javascript下4个跨浏览器必备的函数
Mar 07 #Javascript
Zero Clipboard js+swf实现的复制功能使用方法
Mar 07 #Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
Mar 07 #Javascript
javascript实现面向对象类的功能书写技巧
Mar 07 #Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
Mar 07 #Javascript
You might like
PHP新手上路(七)
2006/10/09 PHP
preg_match_all使用心得分享
2014/01/31 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
JavaScript格式化数字的函数代码
2010/11/30 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
JavaScript 判断浏览器是否支持SVG的代码
2013/03/21 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
python属于解释语言吗
2020/06/11 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
材料化学应届生求职信
2013/10/09 职场文书
给老婆的搞笑检讨书
2014/01/12 职场文书
计算机学生的自我评价分享
2014/02/18 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
小学家长评语大全
2014/04/16 职场文书
中学生爱国演讲稿
2014/09/05 职场文书
2015年教育实习工作总结
2015/04/24 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS