闭包定义
在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量。即能够读取其它函数内部变量的函数。
闭包实例
// 有如下函数:
// sum(2,3) //结果是5
// sum(2)(3) //结果是5
// 请写出sum函数的具体怎么实现
function sum(i) {
if(arguments.length == 2) {
return(arguments[0] + arguments[1]);
}
else {
return function sum1(j) {
return i + j;
}
}
}
console.log(sum(2, 3));
console.log(sum(2)(3));
注意
函数带()才是执行函数,才会被调用,单纯
var fun = function() {
alert("hello world");
}
是不会弹窗的,只有调用fun()才会弹窗。
闭包的优势
1、能够读取函数内部的变量
2、闭包使用的局部变量会一直存在于内存中,不会在调用结束后,被垃圾回收机制回收
闭包的劣势
1、由于闭包会使函数中的变量保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题。
解决办法是,退出函数之前,将不使用的局部变量删除。
利用闭包实现局部变量的累加
由于
1.调用函数时,为局部变量开辟内存;函数调用结束时,局部变量内存立刻被释放掉。
2. 全局变量是公共的,容易发生问题。
但闭包使用的局部变量不会被立刻释放掉,会在内存中驻留一段时间,很好的解决了a,b。
变量累加举例:
function add () {
var age=10;
return function(){
age++;
return age;
}
}
var fun=add();
console.log(fun()); //11
console.log(fun()); //12
console.log(fun()); //13