关于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系列(6) 强大的原型和原型链
Jan 15 Javascript
Javascript合并表格中具有相同内容单元格示例
Aug 11 Javascript
利用jquery包将字符串生成二维码图片
Sep 12 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
JavaScript输出当前时间Unix时间戳的方法
Apr 06 Javascript
setTimeout函数的神奇使用
Feb 26 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
Jul 20 Javascript
bootstrap动态调用select下拉框的实例代码
Aug 09 Javascript
微信小程序登录态和检验注册过没的app.js写法
May 22 Javascript
webpack4 optimization使用总结
Nov 10 Javascript
vue实现点击按钮切换背景颜色的示例代码
Jun 23 Javascript
基于vuex实现购物车功能
Jan 10 Vue.js
基于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/17 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
python中的代码编码格式转换问题
2015/06/10 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
浅析Python四种数据类型
2018/09/26 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
Django中的cookie和session
2019/08/27 Python
python内置模块collections知识点总结
2019/12/19 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
pymysql模块使用简介与示例
2020/11/17 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
利用HTML5 Canvas API绘制矩形的超级攻略
2016/03/21 HTML / CSS
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
竞聘书怎么写,如何写?
2014/03/31 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
小学优秀班主任材料
2014/12/17 职场文书
人口与计划生育责任书
2015/05/09 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
Window server中安装Redis的超详细教程
2021/11/17 Redis