关于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 相关文章推荐
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
Sep 08 Javascript
JavaScript 密码强度判断代码
Sep 05 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
Apr 27 Javascript
javascript:window.open弹出窗口的位置问题
Mar 18 Javascript
jquery ui bootstrap 实现自定义风格
Nov 14 Javascript
在Javascript中处理数组之toSource()方法的使用
Jun 09 Javascript
JavaScript中return用法示例
Nov 29 Javascript
实现两个文本框同时输入的实例
Sep 25 Javascript
帝国cms首页列表页实现点赞功能
Oct 30 Javascript
node实现分片下载的示例代码
Oct 17 Javascript
使用rollup打包JS的方法步骤
Dec 05 Javascript
原生js实现日期选择插件
May 21 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
各种咖啡的英文名子是什么
2021/03/03 新手入门
自定义PHP分页函数
2006/10/09 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
php json相关函数用法示例
2017/03/28 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
Bootstrap源码解读导航条(7)
2016/12/23 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
ant design实现圈选功能
2019/12/17 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
Python continue语句实例用法
2020/02/06 Python
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
家长通知书教师评语
2014/04/17 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
处级干部考察材料
2014/12/24 职场文书
windows server2008 开启端口的实现方法
2022/06/25 Servers