标签:
闭包在js开发中会经常被使用到。那么,什么是闭包?
一个官方的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式。换句话说,JavaScript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
function wrap(){ var value="something"; function closure(){ alert(value); } return closure; }
wrapp();
闭包有什么用呢?
1.模拟面向对象的代码风格,实现封装
function Person(){ var name = "name"; return { getName : function(){ return name; }, setName : function(newName){ name = newName; } } };
2. 缓存数据
引用JavaScript单例模式的写法
var single = (function(){ var unique; function getInstance(){ if( unique === undefined ){ unique = new Construct(); } return unique; } function Construct(){ // ... 生成单例的构造函数的代码 } return { getInstance : getInstance } })();
这里缓存了对象unique,实现了下一次调用时使用的对象就是unique这个对象。我们经常使用的在for循环的场景下存储变量下表的应用也是基于缓存实现。
闭包的坏处是什么呢?
闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。
http://www.cnblogs.com/carekee/articles/1733847.html
小弟刚入行,欢迎各位拍砖。
标签:
原文地址:http://www.cnblogs.com/frontyefei/p/4638050.html