JavaScript进阶设计模式系列——基础篇——闭包(2)--闭包和生命周期
2017-06-26 16:03
597 查看
生命周期和闭包
局部变量其生命周期,将会随着函数调用的结束而结束掉其生命,也就是内存被销毁。而全局变量则不会,它是永久存在的,除非我们主动销毁全局变量。但是试着看一下如下一段代码,你会发现一个很神奇的事情!局部变量a 竟然没有被销毁!var func = function(){ var a = 1; return function(){ a ++ ; console.log(a); } } var fn = func(); fn(); fn(); fn(); fn(); fn();
输出结果为:2、3、4、5、6
解释: 其实,和我们预期的结果恰恰相反,为什么?这就是我们说到的闭包现象。因为当执行var fn = func()的时候,返回了一个匿名函数的引用给fn对象。所以,fn可以访问到func被调用时产生的环境,而局部变量一直处于这个环境中。因此,闭包的环境就出现了。看起来就像是局部变量的生命周期被延续了。
相关文章推荐
- JavaScript进阶设计模式系列——基础篇——闭包(4)--闭包和面向对象的设计
- JavaScript进阶设计模式系列——基础篇——闭包(5)--命令模式的两种实现方式
- JavaScript进阶设计模式系列——基础篇——高阶函数
- JavaScript 面向对象及设计模式系列--灵活的JavaScript,Timo.Lee
- 深入理解JavaScript系列(32):设计模式之观察者模式
- 深入理解JavaScript系列(28):设计模式之工厂模式
- 深入理解JavaScript系列(36):设计模式之中介者模式
- 深入理解JavaScript系列(32):设计模式之观察者模式
- 深入理解JavaScript系列(35):设计模式之迭代器模式
- 深入理解JavaScript系列(29):设计模式之装饰者模式
- 深入理解JavaScript系列(25):设计模式之单例模式
- 深入理解JavaScript系列(35):设计模式之迭代器模式
- 深入理解JavaScript系列(25):设计模式之单例模式
- 深入理解JavaScript系列(29):设计模式之装饰者模式
- 深入理解JavaScript系列(29):设计模式之装饰者模式
- 深入理解JavaScript系列(30):设计模式之外观模式
- 前端攻略系列(三) - javascript 设计模式(文章很长,请自备瓜子,水果和眼药水)
- 深入理解JavaScript系列(28):设计模式之工厂模式
- 深入理解JavaScript系列(31):设计模式之代理模式
- 深入理解JavaScript系列(33):设计模式之策略模式