关于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 相关文章推荐
jquery struts 验证唯一标识(公用方法)
Mar 27 Javascript
Jquery动态进行图片缩略的原理及实现
Aug 13 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
Jun 06 Javascript
js中的json对象详细介绍
Oct 29 Javascript
基于jquery实现发送文章到手机的代码
Dec 26 Javascript
js实现页面跳转的几种方法小结
May 16 Javascript
Jquery ajax请求导出Excel表格的实现代码
Jun 08 Javascript
jQuery遍历节点树方法分析
Sep 08 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 Javascript
VUE实现图片验证码功能
Nov 18 Javascript
vue如何使用外部特殊字体的操作
Jul 30 Javascript
详解Typescript里的This的使用方法
Jan 08 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
Zend公司全球首推PHP认证
2006/10/09 PHP
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
php设计模式 Builder(建造者模式)
2011/06/26 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
JavaScript实现滑动导航栏效果
2017/08/30 Javascript
jQuery中each方法的使用详解
2018/03/18 jQuery
node中的密码安全(加密)
2018/09/17 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
python 文件查找及内容匹配方法
2018/10/25 Python
python 自动重连wifi windows的方法
2018/12/18 Python
Python3远程监控程序的实现方法
2019/07/15 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
django ORM之values和annotate使用详解
2020/05/19 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
酒店出纳岗位职责
2013/12/29 职场文书
班训口号大全
2014/06/18 职场文书
银行实习推荐信
2015/03/27 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
严以律己学习心得体会
2016/01/13 职场文书
写作技巧:如何撰写商业计划书
2019/08/08 职场文书
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏