关于JS中的闭包浅谈


Posted in Javascript onAugust 23, 2013

( ⊙o⊙ )!!!这个也太尼玛官方了撒,作为菜鸟的我根本无法理解它想表达个什么意思!但是作为一只好奇的菜鸟又很想知道“闭包”到底是个什么东西!所以最终找到了传说中的“度娘”帮忙!还算有了一点小小的理解!

个人见解:在函数体内定义另外的方法函数,而这个方法函数被函数以外的变量引用,这时就形成了闭包!

可能这样的理解也太抽象了,并不是那么简单易懂!实例吧:

<script type="text/javascript">
function A(){
    var S=0;
    function B(){
        alert(++S);
    }
    return B;
}
var C=A();
C();
</script>

上面这一段代码就创建了一个闭包,因为当函数执行到var C=A();时,表面上看C指向的是A函数,而实际上C所指向的函数是B函数,所以再执行到C()的时候就会输出2;这样的话B函数就被A函数以外的变量引用了,根据个人见解,创建了一个闭包!

当我在小小的了解了什么时候闭包后也顺便看了哈闭包的用途,据说闭包的用途主要有两点:

1、可以读取函数内部的变量

2、让这些变量始终保持在内存中

<script type="text/javascript">function A(){
 var S=1;
 D=function(){
        S+=1;
    }
 function B(){

alert(S);
 }


return B;
}
var C=A();
C(); // 输出1
D();
C(); // 输出2
 </script>

上面的代码中C指向的还是是B函数,C执行了两次,第一次输出1,第二次输出2,这证明了S一直被保存在内存中,并没有在A函数在被调用后自动清除,这是为什么呢,原因是因为B函数被赋给了一个全局变量,这导致了B函数一直在内存中,而B函数的执行又需要依赖着A函数,所以A也一直在内存中,不会在调用结束后被回收!(这样的理解貌似有点不专业)!

表达完毕,请广大群众多多指教!

Javascript 相关文章推荐
Javascript模块化编程(一)模块的写法最佳实践
Jan 17 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
Jan 24 Javascript
JavaScript中的object转换成number或string规则介绍
Dec 31 Javascript
JavaScript-html标题滚动效果的简单实现
Sep 08 Javascript
js+div+css下拉导航菜单完整代码分享
Dec 28 Javascript
简单实现js选项卡切换效果
Feb 09 Javascript
详解Angular路由 ng-route和ui-router的区别
May 22 Javascript
js中less常用的方法小结
Aug 09 Javascript
iview日期控件,双向绑定日期格式的方法
Mar 15 Javascript
layui实现数据表格隐藏列的示例
Oct 25 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
Oct 31 Javascript
vue抽出组件并传值实例
Jul 31 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
Aug 22 #Javascript
仿百度输入框智能提示的js代码
Aug 22 #Javascript
JAVASCRIPT函数作用域和提前声明 分享
Aug 22 #Javascript
JavaScript中的eval()函数详解
Aug 22 #Javascript
from 表单提交返回值用post或者是get方法实现
Aug 21 #Javascript
jquery重新播放css动画所遇问题解决
Aug 21 #Javascript
JS性能优化笔记搜索整理
Aug 21 #Javascript
You might like
在字符串指定位置插入一段字符串的php代码
2010/02/16 PHP
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
php实现paypal 授权登录
2015/05/28 PHP
php实现计算百度地图坐标之间距离的方法
2016/05/05 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
ppk谈JavaScript style属性
2008/10/10 Javascript
CCPry JS类库 代码
2009/10/30 Javascript
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
vue如何使用rem适配
2021/02/06 Vue.js
python实现杨辉三角思路
2017/07/14 Python
Python编程pygal绘图实例之XY线
2017/12/09 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
浅谈python常用程序算法
2019/03/22 Python
如何基于python实现不邻接植花
2020/05/01 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
幼儿园教师节活动方案
2014/02/02 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
小学教育见习报告
2014/10/31 职场文书
2014年法院工作总结
2014/11/24 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
社区服务理念口号
2015/12/25 职场文书
python之django路由和视图案例教程
2021/07/26 Python
以下牛机,你有几个
2022/04/05 无线电
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技