关于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 相关文章推荐
JS对HTML标签select的获取、添加、删除操作
Oct 17 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
Jun 23 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
Mar 23 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
Feb 17 Javascript
全面了解JavaScript对象进阶
Jul 19 Javascript
清除浏览器缓存的几种方法总结(必看)
Dec 09 Javascript
Vue中保存用户登录状态实例代码
Jun 07 Javascript
vuex操作state对象的实例代码
Apr 25 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
Oct 07 Javascript
jQuery实现的中英文切换功能示例
Jan 11 jQuery
vue中node_modules中第三方模块的修改使用详解
May 31 Javascript
五句话帮你轻松搞定js原型链
Dec 09 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
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
PHP获取网卡地址的代码
2008/04/09 PHP
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
php实现生成验证码实例分享
2016/04/10 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
JavaScript更改原始对象valueOf的方法
2015/03/19 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
Python遍历指定文件及文件夹的方法
2015/05/09 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
2016/04/12 Python
Python3爬楼梯算法示例
2019/03/04 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
Python tcp传输代码实例解析
2020/03/18 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
如何开启linux的ssh服务
2013/06/03 面试题
个人自我鉴定总结
2014/03/25 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
企业承诺书格式
2014/05/21 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
公积金贷款承诺书
2015/04/30 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers