闭包定义 闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。就是在另一个作用域中保存了一份它从上一级函数或者作用域得到的变量,而这些变量是不会随上一级函数的执行完成而销毁。 前提条件 计算机中的内存变量如果有被引用着的话,则系统是不会将之回收的。只要我们能够一直持有这个引用,则就可以令局部变量避免被回收——这是闭包概念成立的前提 闭包用途 可以读取到函数内部的变量 可以让函数内部变量保持在内存中 避免全局变量的污染 私有成员的存在 注意事项 闭包会让函数中的变量都被保存到内存中,内存消耗较大,不能滥用闭包,否则会导致性能和内存泄漏问题(退出函数之前可以将不用的局部变量全部删除) 闭包能改变父函内部变量的值,一定要小心使用 示例
for(var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i);
}, 100);
}
输出10次10
for(var i = 0; i < 10; i++) {
(function(e) {
setTimeout(function() {
console.log(e);
}, 100);
})(i);
}
输出0-9
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
console.log(object.getNameFunc()()); //The Window
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
that = this;
return function(){
return that.name;
};
}
};
console.log(object.getNameFunc()()); //The Window
参考:http://www.2cto.com/kf/201410/342609.html