1.什么是闭包
在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量,使局部变量无法被清除。
从技术的角度讲,所有的JavaScript函数都是闭包:它们都是对象,它们都关联到作用域链。
<script>
function init() {
var num= 10; // num 是一个被 init 创建的局部变量
function printf() { // printf() 是内部函数,一个闭包
alert(num); // printf() 函数使用了父函数中声明的变量
}
printf();
}
init();
function fun(){
var num=10;
function fn(){
num++
return num
}
return fn
}
var count = fun()
console.log(count()); //11
</script>
因为:一个函数引用另一个函数的变量,因为变量被引用着所以不会被回收
这是优点也是缺点,不必要的闭包只会增加内存消耗
闭包中的this在运行时指向window
2.闭包的用途
可以读取函数内部的变量,是将函数内部和函数外部连接起来的一座桥梁。
让这些变量的值始终保持在内存中。
3.闭包的缺点
闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。过度使用闭包会导致性能下降,尽量少使用闭包,只在必要时使用。
闭包会在父函数外部,改变父函数内部变量的值