关于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 相关文章推荐
{}与function(){}选用空对象{}来存放keyValue
May 23 Javascript
js实现简单计算器
Nov 22 Javascript
Function.prototype.apply()与Function.prototype.call()小结
Apr 27 Javascript
AngularJS基础 ng-keydown 指令简单示例
Aug 02 Javascript
jsTree使用记录实例
Dec 01 Javascript
javascript 操作cookies详解及实例
Feb 22 Javascript
原生JS实现圆环拖拽效果
Apr 07 Javascript
微信小程序中显示html格式内容的方法
Apr 25 Javascript
vue.js指令v-for使用以及下标索引的获取
Jan 31 Javascript
Vue+Element-UI实现上传图片并压缩
Nov 26 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
Mar 12 Javascript
JS监听组合按键思路及实现过程
Apr 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
长波有什么东西
2021/03/01 无线电
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
2014/08/20 PHP
php操作xml入门之cdata区段
2015/01/23 PHP
php实现简单爬虫的开发
2016/03/28 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
JQuery实现简单时尚快捷的气泡提示插件
2012/12/20 Javascript
php与js的区别是什么
2013/08/05 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
Python中super函数的用法
2017/11/17 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
小学生考试获奖感言
2014/01/30 职场文书
致800米运动员广播稿
2014/02/16 职场文书
批评与自我批评范文
2014/10/15 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
cypress测试本地web应用
2022/06/01 Javascript