关于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 Hack
Jul 24 Javascript
javascript中将Object转换为String函数代码 (json str)
Apr 29 Javascript
全面理解面向对象的 JavaScript(来自ibm)
Nov 10 Javascript
Firefox中使用outerHTML的2种解决方法
Jun 07 Javascript
jQuery制作简洁的多级联动Select下拉框
Dec 23 Javascript
JQuery实现简单的图片滑动切换特效
Nov 22 Javascript
深入解析JavaScript中的arguments对象
Jun 12 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
Jan 01 Javascript
jQuery EasyUi 验证功能实例解析
Jan 06 Javascript
jQuery实现三级联动效果
Mar 02 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
Jan 12 Javascript
js运算符的一些特殊用法
Jul 29 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使用异或实现的加密解密实例
2013/09/04 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
DWZ+ThinkPHP开发时遇到的问题分析
2016/12/12 PHP
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
jquery popupDialog 使用 加载jsp页面的方法
2016/10/25 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
Python中的True,False条件判断实例分析
2015/01/12 Python
python基于ID3思想的决策树
2018/01/03 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
关于护士节的演讲稿
2014/05/26 职场文书
施工质量承诺书范文
2014/05/30 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
小学副班长竞选稿
2015/11/21 职场文书
小学四年级作文之写景
2019/08/23 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL