关于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中的instanceof和typeof
Feb 27 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
Sep 04 Javascript
基于javascript实现彩票随机数生成(简单版)
Apr 17 Javascript
javascript作用域、作用域链(菜鸟必看)
Jun 16 Javascript
js基本算法:冒泡排序,二分查找的简单实例
Oct 08 Javascript
微信小程序 UI布局常用技巧整理总结
Dec 05 Javascript
JavaScript定义函数_动力节点Java学院整理
Jun 27 Javascript
微信小程序template模板与component组件的区别和使用详解
May 22 Javascript
VUE中setTimeout和setInterval自动销毁案例
Sep 07 Javascript
jquery实现简易验证插件封装
Sep 13 jQuery
vscode 调试 node.js的方法步骤
Sep 15 Javascript
JS setTimeout与setInterval的区别
Apr 20 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函数
2006/10/09 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
javascript 对象比较实现代码
2009/04/27 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
JS上传组件FileUpload自定义模板的使用方法
2016/05/10 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
js代码编写无缝轮播图
2020/09/13 Javascript
Python中的hypot()方法使用简介
2015/05/18 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
python用for循环求和的方法总结
2019/07/08 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
python中os.remove()用法及注意事项
2021/01/31 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
运动会通讯稿150字
2014/02/15 职场文书
上课打牌的检讨书
2014/02/15 职场文书
热门专业求职信
2014/05/24 职场文书
理财学专业自荐书
2014/06/28 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
具结保证书范本
2015/05/11 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书
《莫泊桑拜师》教学反思
2016/02/22 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书