4、JavaScript高级之闭包

来源:互联网 发布:不定积分 软件 编辑:程序博客网 时间:2024/06/11 18:35

一、什么是闭包

距离上一次更新有一段时间了,过年你懂得,接下来就谈谈JavaScript的高级用法——闭包。js的闭包其实不是什么难懂的高深的概念,只是有些书籍当中介绍的不够易懂或者说举得例子不太恰当,现在我们就通过简单的例子来理解“闭包”。作为程序员,也许一段针对的代码,比那些文字描述更能说明问题,用代码说话,眼见为实。

好了,先看下面的一段代码:

   function t1(){        var age = 20;         function t2(){            alert(age);        }        return t2;    }    var age = 100;    var temp = t1();    temp();//20

为了突出 执行效果,在t1函数外层也定义了一个age=100的变量,执行完 var temp = t1(); 后,将函数t2赋予了temp,这样temp其实就是t2函数的引用,紧接着执行temp,输出结果竟然是20,毫无疑问,变量age是在t1函数的作用域下的,你已经看到JavaScript语言与其他语言不同的地方。

在大部分语言中,如java,函数t1内的局部变量会随着函数t1执行结束而销毁,但是在js中,变量age=20却被t2捕抓,即使是t1函数执行结束后,依然可以通过t2访问到age
  这种情况,即返回的t2函数不是孤立的,甚至把周围的变量环境,形成了一个‘封闭包’,一起返回,所以叫‘闭包’


二、闭包的应用

JavaScript既然有闭包的实现,那么JavaScript的闭包是怎么使用的或应用在哪种情况下呢?通过上面的例子已经看到,函数t1内部的age变量只能通过返回的t2函数访问,那么age是不是相当于java的private私有变量呢,哈哈,这个在下一篇会讲到,而且将通过“闭包”将属性封装在内部,做成接口,别人也就看不见,也不会污染到其他的变量,想想是不是呢。

讲那么多,我们就通过一个实际的例子看看:

要求:实现一个计数器,每次调用某函数,使计时器的值加1

1、闭包实现

   function counter(){        var i = 0;//但counter执行完毕后,除了返回的inc函数,其他函数访问不了变量i        var inc = function(){            return ++i;        }        return inc;    }    var c = counter();    alert(c());    alert(c());    alert(c());
2、可以结合“匿名”函数,进行简化

   var counter = (function(){        var i = 0;        return function(){            return ++i;        }    })();    alert(counter());    alert(counter());    alert(counter());
相信你已经看到了闭包的好处,但是请不到胡乱使用闭包,因为在IE浏览器下是使用“计数”的方式跟踪对象来进行垃圾回收的,由于闭包的特新,不会释放局部变量,如果造成过多的循环引用,将会引起“内存泄露”。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 投屏网速慢怎么办 央视影音己停止怎么办 手机接收信号不好怎么办 联网电视无信号怎么办 win7浏览器删了怎么办 ie浏览器删了怎么办 网络电视连接失怎么办 网络电视没信号怎么办 转让店铺后悔了怎么办 蘑菇街没有流量怎么办 淘宝店没有生意怎么办 蘑菇街直播封号怎么办 淘宝忘记给赠品怎么办 直通车的占比高怎么办 赠品质量有问题怎么办 淘宝赠品有问题怎么办 顾客叫送赠品怎么办 淘宝展现量低怎么办 dw模板不更新怎么办 闭水试验漏水怎么办 绘声绘影试用过了怎么办 探探被选成试用新版用户怎么办 淘宝被限制评论怎么办 信用钱包套路了怎么办 农业银行还贷迟了一天怎么办 淘宝限购一件怎么办 小米盒子电视打不开怎么办 手机淘宝总是卡怎么办 淘宝相机不能用怎么办 作业盒子没声音怎么办 作业盒子闪退怎么办 双面羊绒缩水了怎么办 作业盒子为静音怎么办 没有上进心的人怎么办 孩子不听老人话怎么办 淘宝分销没有视频怎么办 孕妇血糖稍高怎么办 苹果6s 卡怎么办 花呗额度用完怎么办 手机百度网站无法访问怎么办 手机应用删不了怎么办