关于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 相关文章推荐
js Array对象的扩展函数代码
Apr 24 Javascript
javascript 得到文件后缀名的思路及实现
May 09 Javascript
浅析Node.js的Stream模块中的Readable对象
Jul 29 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
Oct 25 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
Dec 31 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
Jan 22 Javascript
node.js基于express使用websocket的方法
Nov 09 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
Aug 08 Javascript
关于Vue项目跨平台运行问题的解决方法
Sep 18 Javascript
vue实现拖拽的简单案例 不超出可视区域
Jul 25 Javascript
vue使用canvas实现移动端手写签名
Sep 22 Javascript
JavaScript中的几种继承方法示例
Dec 06 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 mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
JS随机密码生成算法
2019/09/23 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
Python脚本实现下载合并SAE日志
2015/02/10 Python
在Django的URLconf中使用命名组的方法
2015/07/18 Python
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
NumPy统计函数的实现方法
2020/01/21 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
销售实习自我鉴定
2013/12/07 职场文书
大学自主招生自荐信
2013/12/16 职场文书
亲子读书活动方案
2014/02/22 职场文书
生日寿星公答谢词
2015/09/29 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
基于python的matplotlib制作双Y轴图
2021/04/20 Python
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS