我的理解:闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
闭包的危害:
1.由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在
function test(){
var n = 1;
return function(){
// function 就是闭包,它调用了test()中的变量n
n++;
console.log(n)
}
}
var x = test();
x(); // 2 因为n被function调用,当函数执行完时n还保留着。所以会形成内存占用
// 换种方式
function test2(){
var n = 1;
function add(){
// add()就是闭包,它调用了test()中的变量n
n++;
console.log(n)
}
return add;
}
var xk = test2();
xk(); // 2 因为n被add调用,当函数执行完时n还保留着。所以会形成内存占用
退出函数之前,将不使用的局部变量全部删除。