关于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格式化金额可选是否带千分位以及保留精度
Jan 28 Javascript
jQuery on()方法使用技巧详解
Apr 16 Javascript
jQuery实现的网页竖向菜单效果代码
Aug 26 Javascript
jQuery对象与DOM对象转换方法详解
May 10 Javascript
Javascript ES6中数据类型Symbol的使用详解
May 02 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
Jul 07 Javascript
JavaScript实现滑动导航栏效果
Aug 30 Javascript
详解vue项目首页加载速度优化
Oct 18 Javascript
js实时监控文本框输入字数的实例代码
Jan 18 Javascript
vue实现选项卡及选项卡切换效果
Apr 24 Javascript
js实现弹出框的拖拽效果实例代码详解
Apr 16 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 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
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
怎样判断jQuery当前元素是隐藏还是显示
2016/11/23 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
vue地区选择组件教程详解
2018/05/04 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
Python去掉字符串中空格的方法
2014/03/11 Python
Python中zip()函数用法实例教程
2014/07/31 Python
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
Python 的描述符 descriptor详解
2016/02/27 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
python双向链表原理与实现方法详解
2019/12/03 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
蒂娜商店:Tiina the Store
2019/12/07 全球购物
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
应聘英语教师求职信
2014/04/24 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
社区综治工作汇报
2014/10/27 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
鉴史问廉观后感
2015/06/10 职场文书
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS