实践中对于闭包的一些理解
2014-05-15 00:00
134 查看
摘要: 实际中尝尝需要对利用闭包来优化代码,下面是对闭包功能的一些理解
首先 匿名自执行函数(释放内存)
本质上 所有函数应该加上var ,不加上var 理解为全局变量。
但是 ,实际中,往往有这样一种函数,只需要调用一次,调用之后不会再用,最好能立即销毁,释放空间。
例如 ui的初始化,环境的配置,只需要执行一次。此时 可以应用匿名自执行函数
(function(){
var init = function(){
alert("这是一个自治性函数,执行完之后会销毁,释放内存");
}
})();
然后:基于缓存
与匿名函数相反,有些时候,有些函数需要经常调用,而且,每次调用花费也比较大,因此可以进行保留
var important_foo = (funcition(){
alert("这是一个非常重要的函数,经常调用,且里面有好多初始化复杂的子函数,/n保存,不会被xiaohui");
})();
再者:类似于单例模式,只提供一个外部的唯一入口,保护内部方法不被调用
var call_function; //定义一个入口
(function(){
call_function = function () {
return inner_function();
};
var inner_function = function () {
alert("调用内部函数了");
return inner_test();
};
function inner_test(){
alert("you can call inner test");
return out_function();
}
})();
/**
* 注解,通过一个外部变量来调用内部的方法,相当于内部方法的唯一入口
* 闭包可以调用外部方法
* */
function test(){
call_function();
}
function out_function(){
alert("waibuhanshu")
}
最后,实现面向对象,其实每个对象互不干扰,下面是一段 经典代码
function Person(){
var name = "default";
return {
getName : function(){
return name;
},
setName : function(newName){
name = newName;
}
}
};
var john = Person();
print(john.getName());
john.setName("john");
print(john.getName());
var jack = Person();
print(jack.getName());
jack.setName("jack");
print(jack.getName());
运行结果如下:
default
john
default
jack
首先 匿名自执行函数(释放内存)
本质上 所有函数应该加上var ,不加上var 理解为全局变量。
但是 ,实际中,往往有这样一种函数,只需要调用一次,调用之后不会再用,最好能立即销毁,释放空间。
例如 ui的初始化,环境的配置,只需要执行一次。此时 可以应用匿名自执行函数
(function(){
var init = function(){
alert("这是一个自治性函数,执行完之后会销毁,释放内存");
}
})();
然后:基于缓存
与匿名函数相反,有些时候,有些函数需要经常调用,而且,每次调用花费也比较大,因此可以进行保留
var important_foo = (funcition(){
alert("这是一个非常重要的函数,经常调用,且里面有好多初始化复杂的子函数,/n保存,不会被xiaohui");
})();
再者:类似于单例模式,只提供一个外部的唯一入口,保护内部方法不被调用
var call_function; //定义一个入口
(function(){
call_function = function () {
return inner_function();
};
var inner_function = function () {
alert("调用内部函数了");
return inner_test();
};
function inner_test(){
alert("you can call inner test");
return out_function();
}
})();
/**
* 注解,通过一个外部变量来调用内部的方法,相当于内部方法的唯一入口
* 闭包可以调用外部方法
* */
function test(){
call_function();
}
function out_function(){
alert("waibuhanshu")
}
最后,实现面向对象,其实每个对象互不干扰,下面是一段 经典代码
function Person(){
var name = "default";
return {
getName : function(){
return name;
},
setName : function(newName){
name = newName;
}
}
};
var john = Person();
print(john.getName());
john.setName("john");
print(john.getName());
var jack = Person();
print(jack.getName());
jack.setName("jack");
print(jack.getName());
运行结果如下:
default
john
default
jack
相关文章推荐
- 对于闭包的一些理解
- 对于闭包的一些理解
- 对于线程的一些理解
- javascript权威指南第五版 读后有感!!(读这本书之后的一些理解,和恍然大悟的感觉)包括闭包,继承和应用
- 对于json多维解析的一些理解
- OpenCV中对于cvCreateImage和cvReleaseImage的一些小理解
- 深入理解Java虚拟机(JVM高级特性与最佳实践java虚拟机)的一些知识总结
- 对于MVC应该理解的一些问题
- java 中对于接口的理解和我对java 的一些理解
- 对于堆排序的一些理解!
- 对于CN Payroll我的一些个人理解
- sql和mysql对于别名不能调用的一些理解
- 对于android触摸事件模型的一些理解
- 对于NHibernate中延迟加载个人的一些理解
- 转 本人对于“用例”的一些理解和总结
- 转 本人对于“用例”的一些理解和总结
- 对于闭包的理解和prototype的应用原理
- 转 本人对于“用例”的一些理解和总结
- 对于I2C总线协议的一些理解,未完待续。。。
- 对于 “OWASP TOP 10” 的一些理解