您的位置:首页 > 其它

实践中对于闭包的一些理解

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: