关于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替换table中的内容并显示进度条的代码
Aug 02 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
Apr 26 Javascript
js上传图片及预览功能实例分析
Apr 24 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
Nov 24 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
Dec 07 Javascript
JS实现单击输入框弹出选择框效果完整实例
Dec 14 Javascript
js自定义弹框插件的封装
Aug 24 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
Dec 20 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
Jul 03 Javascript
vue router 配置路由的方法
Jul 26 Javascript
JQuery扩展对象方法操作示例
Aug 21 jQuery
vue实现放大镜效果
Sep 17 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个人网站架设连环讲(一)
2006/10/09 PHP
简单采集了yahoo的一些数据
2007/02/14 PHP
php 安全过滤函数代码
2011/05/07 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
Jquery通过JSON字符串创建JSON对象
2014/08/24 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
bootstarp modal框居中显示的实现代码
2017/02/18 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
9个JavaScript日常开发小技巧
2020/10/06 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
Python中的with...as用法介绍
2015/05/28 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
普通院校学生的自荐信
2013/11/27 职场文书
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
如何写早恋检讨书
2014/09/10 职场文书
德能勤绩工作总结
2015/08/11 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle