闭包的实际应用(更新中。。。)
2016-07-13 19:45
141 查看
1、匿名自执行函数
我们知道所有的变量,如果不加上var关键字,则默认的会添加到全局对象的属性上去,这样的临时变量加入全局对象有很多坏处,
比如:别的函数可能误用这些变量;造成全局对象过于庞大,影响访问速度(因为变量的取值是需要从原型链上遍历的)。
除了每次使用变量都是用var关键字外,我们在实际情况下经常遇到这样一种情况,即有的函数只需要执行一次,其内部变量无需维护,
比如UI的初始化,那么我们可以使用闭包:
复制代码
var data= {
table : [],
tree : {}
};
(function(dm){
for(var i = 0; i < dm.table.rows; i++){
var row = dm.table.rows[i];
for(var j = 0; j < row.cells; i++){
drawCell(i, j);
}
}
})(data);
复制代码
我们创建了一个匿名的函数,并立即执行它,由于外部无法引用它内部的变量,因此在函数执行完后会立刻释放资源,关键是不污染全局对象。
2、结果缓存
我们开发中会碰到很多情况,设想我们有一个处理过程很耗时的函数对象,每次调用都会花费很长时间,
3、封装
参考:http://www.2cto.com/kf/201410/342609.html
我们知道所有的变量,如果不加上var关键字,则默认的会添加到全局对象的属性上去,这样的临时变量加入全局对象有很多坏处,
比如:别的函数可能误用这些变量;造成全局对象过于庞大,影响访问速度(因为变量的取值是需要从原型链上遍历的)。
除了每次使用变量都是用var关键字外,我们在实际情况下经常遇到这样一种情况,即有的函数只需要执行一次,其内部变量无需维护,
比如UI的初始化,那么我们可以使用闭包:
复制代码
var data= {
table : [],
tree : {}
};
(function(dm){
for(var i = 0; i < dm.table.rows; i++){
var row = dm.table.rows[i];
for(var j = 0; j < row.cells; i++){
drawCell(i, j);
}
}
})(data);
复制代码
我们创建了一个匿名的函数,并立即执行它,由于外部无法引用它内部的变量,因此在函数执行完后会立刻释放资源,关键是不污染全局对象。
2、结果缓存
我们开发中会碰到很多情况,设想我们有一个处理过程很耗时的函数对象,每次调用都会花费很长时间,
3、封装
参考:http://www.2cto.com/kf/201410/342609.html
相关文章推荐
- java并发包学习系列:线程复用之线程池(草稿)
- java并发包学习系列:几个多线程控制工具类(草稿)
- 1061. Dating (20)
- 【c++】线程thread类
- UITableView的性能优化
- jzoj 1391. 【2012.02.25普及组】危险系数 解题报告
- 进程的虚拟地址空间
- 傅利曼数
- Linux 文件与目录管理+用户管理命令
- Linux系统,对于服务器AdminServer, 与计算机Machine-0相关联的节点管理器无法访问
- java并发包学习系列:读写锁(草稿)
- java并发包学习系列:信号量(草稿)
- POJ 3613 Cow Relays
- UE4中的DynamicTexture数据更新
- 操作数据库的注意事项
- NYOJ 大数阶乘问题
- 单例模式之 恶汉(饿汉)模式
- Java之 BufferedInputStream详解 (缓冲输入流)的认知、源码和示例
- comparator接口与Comparable接口的区别
- 5-25 念数字 (15分)