javascript设计模式4闭包
何为闭包?
闭包的本质在于函数的变量作用域。正由于函数体内变量作用域的生存周期形成了闭包环境。
如何实现闭包?
以命令模式为例,命令模式的意图是封装请求为对象,从而分离请求的发起者和请求的接收者之间的耦合关系。命令执行之前,可以预先在命令对象中植入命令的接收者。
var tv = {
open : function(){
console.log("open tv")
},
close: funtion(){
console.log(" close tv")
}
}
var createCommand = function(receiver){
var execute = function(){
return receiver.open();
}
var undo = function(){
return receiver.close();
}
return {
execute:execute,
undo:undo
}
}
setCommand(createCommand(tv));
闭包和内存管理?
当使用闭包的时候,局部变量本来应该在函数退出的时候被解除引用,但是如果局部变量被封装在了闭包形成的环境中,那么这个局部变量就能一直生存下去。那么这种情况算不算一种内存泄露?
实际上,当我们使用闭包的时候,一般都是我们选择主动把一些变量封装到闭包中,因为以后可能还需要用到此变量。对于这些变量,放到闭包中和放到全局变量中对内存影响是一致的。并不能说是一种内存泄露。
再者如果我们需要回收这些变量,可以手动将这些变量设置为null。
使用闭包的同时比较容易形成循环引用,如果闭包的作用域链中保存着一些dom节点,这时候就有可能造成内存泄露。但这本身并非闭包的问题,也非js的问题。
Think Different, Make Different-编程是一个习惯

浙公网安备 33010602011771号