关于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 传统事件模型构造的事件监听器实现代码
May 31 Javascript
转换json格式的日期为Javascript对象的函数
Jul 13 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
Mar 27 Javascript
一个不错的仿携程自定义数据下拉选择select
Sep 01 Javascript
JavaScript提高网站性能优化的建议(二)
Jul 24 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
Sep 21 Javascript
实例解析jQuery工具函数
Dec 01 Javascript
详解JavaScript中return的用法
May 08 Javascript
node中的cookie的具体使用
Sep 13 Javascript
js module大战
Apr 19 Javascript
vue实现鼠标经过动画
Oct 16 Javascript
vue双向绑定数据限制长度的方法
Nov 04 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基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
让你的网站可编辑的实现js代码
2009/10/19 Javascript
javascript中的对象创建 实例附注释
2011/02/08 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
进一步理解Python中的函数编程
2015/04/13 Python
详细介绍Python中的偏函数
2015/04/27 Python
Python实现高效求解素数代码实例
2015/06/30 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
django 多数据库配置教程
2018/05/30 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
Django models filter筛选条件详解
2020/03/16 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
企业演讲稿范文
2013/12/28 职场文书
求职毕业生自荐书
2014/02/08 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers