闭包
概念:闭包就是函数嵌套函数,是一种将局部变量,进化成私有变量,可以在作用域的外部,修改或操作这个私有变量的环境
(一旦内部函数调用外部函数的局部变量,那么这个时候,这个局部变量就会变成内部函数的私有变量)
原理:利用计算机的垃圾分类回收机制
垃圾回收机制:用过一次的东西,先放在一个内存中,不立即删掉,可以随时进行还原或再次使用,直到没有任何作用的时候再清除
特点:
1.内存消耗大,不能滥用;
2.会在父函数外部改变父函数内部变量的值;
3.将原本要删除的数据保存下来继续使用;
下面写一些简单的闭包案例:
function fn(fun){
var a = 10;
a++;
fun(a);
}
fn(function(res){
res++;
console.log(res); //12
})
function fn(){
var a = 10;
return function(){
a++;
console.log(a);
}
}
var f = fn();
f(); //11
f(); //12
f(); //13
遇到setTimeout时
setTimeout(function (a){
console.log(a); //三秒后,undefined
}, 3000);
//或
setTimeout(fn(10), 3000);
function fn(a){
console.log(a); //没有延迟,直接打印10
}
//闭包
function fn(a){
return function(){
a += "world";
console.log(a)
}
}
setTimeout(fn("hello"),3000); //3秒后打印helloworld