关于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 相关文章推荐
input输入框的自动匹配(原生代码)
Mar 19 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
Jul 31 Javascript
jquery动态加载js/css文件方法(自写小函数)
Oct 11 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
Oct 17 Javascript
jQuery中first()方法用法实例
Jan 06 Javascript
JS实现的4种数字千位符格式化方法分享
Mar 02 Javascript
基于JavaScript如何制作遮罩层对话框
Jan 26 Javascript
浅析JS操作DOM的一些常用方法
May 13 Javascript
JS 动态判断PC和手机浏览器实现代码
Sep 21 Javascript
微信小程序组件传值图示过程详解
Jul 31 Javascript
jQuery实时统计输入框字数及限制
Jun 24 jQuery
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
基于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
世界咖啡生产者论坛呼吁:需要立即就咖啡价格采取认真行动
2021/03/06 咖啡文化
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
python获得图片base64编码示例
2014/01/16 Python
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
对Python中内置异常层次结构详解
2018/10/18 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
Python气泡提示与标签的实现
2020/04/01 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
python中xlrd模块的使用详解
2021/02/01 Python
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
网络编辑岗位职责范本
2014/02/10 职场文书
《掌声》教学反思
2014/02/23 职场文书
党员公开承诺书内容
2014/05/20 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
教师节领导致辞
2015/07/29 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
maven依赖的version声明控制方式
2022/01/18 Java/Android
Vue监视数据的原理详解
2022/02/24 Vue.js