关于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 相关文章推荐
ExtJS Store的数据访问与更新问题
Apr 28 Javascript
javascript 使用 NodeList需要注意的问题
Mar 04 Javascript
js实现div的切换特效上一个下一个
Feb 11 Javascript
javascript实现简单的页面右下角提示信息框
Jul 31 Javascript
javascript常用函数(2)
Nov 05 Javascript
JavaScript+html5 canvas实现本地截图教程
Apr 16 Javascript
angularjs实现文字上下无缝滚动特效代码
Sep 04 Javascript
Node.js复制文件的方法示例
Dec 29 Javascript
jQuery UI Grid 模态框中的表格实例代码
Apr 01 jQuery
微信小程序 蓝牙的实现实例代码
Jun 27 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
Nov 26 Javascript
JavaScript 判断浏览器是否是IE
Feb 19 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处理json时中文问题的解决方法
2011/04/12 PHP
php中的常用魔术方法总结
2013/08/02 PHP
PHP生成二维码的两个方法和实例
2014/07/01 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
jQuery实现鼠标经过图片预览大图效果
2014/04/10 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
Python实现字典依据value排序
2016/02/24 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
重构Python代码的六个实例
2020/11/25 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
HTML5地理定位_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
建筑工程专业毕业生自荐信
2013/10/19 职场文书
音乐系毕业生自荐信
2013/10/27 职场文书
食堂个人先进事迹
2014/01/22 职场文书
应届毕业生简历自我评价
2014/01/31 职场文书
大二学习计划书范文
2014/04/27 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
爱心助学感谢信
2015/01/21 职场文书
失职检讨书大全
2015/01/26 职场文书
2015年售票员工作总结
2015/04/29 职场文书
老员工辞职信范文
2015/05/12 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
思品教学工作总结
2015/08/10 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
python脚本框架webpy模板赋值实现
2021/11/20 Python