之前一直对闭包不是很了解,今天看了几篇解释,似乎明白了很多:
1、为什么会用到闭包:
函数可以访问到外部的变量:
var num = 123;
function fn() {
console.log(num); //输出的值为123
}
fn();
函数内的变量不能被外部访问到:
function fn(){
var num=123;
}
console.log(num)//输出值:num is not undefined说明函数内部的变量是不能被外边访问的。
2、什么是闭包?
就是解决上面第二个案例,在外部访问内部的变量(也就是函数嵌套函数):
function a(){
var i=0;
function fn(){
console.log(i++)
}
return fn;
}
var c=a();//这里执行了函数a,返回函数fn,因此c为函数fn
c();//0,这里调用了函数fn
c();//1,因为i仍然保存在a中,而函数fn保持着对i的引用,因此i在内存中的栈去依然保留
优点:避免全局变量的污染,函数内部可以使用外部的变量
缺点:常驻内存,不会垃圾回收