闭包,按我的理解就是把函数里的参数保存下来,一般情况一个函数(函数作用域)执行完毕,里面声明的变量会全部释放,被垃圾回收器回收。但闭包利用一个技巧,让作用域里面的变量,在函数执行完之后依旧保存没有被垃圾回收处理掉。
列如
function show1(){
var a=1;
return function(b){
return (a++)+b;
}
}
console.log(show1()(1));//2
console.log(show1()(2));//3
var d=show1();
var e=d(1);
var f=d(2);
console.log(e,f);//2 4
var h=d(1);
console.log(h);//4
每调用一次a的值加1,a的值并不会调用后被释放,而是保存在函数内。
由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题。闭包会在父函数外部,改变父函数内部变量的值。