闭包
什么是闭包?
闭包是一种机制,函数执行的时候形成一个新的私有的作用域保护了里面的私有变量不受外界的干扰(外面无法修改里面,里面无法改变外面),这种保护机制是闭包。
闭包能解决什么问题?
闭包可以解决函数外部无法访问函数内部变量的问题。
接下来咱们就以案例的形式一步一步看闭包。
function fn(){
var num = 10;
};
alert(num);
运行代码发现报错了,因为num没有定义,虽然函数fn里面定义了num但是,但是它只能在函数fn中使用。也就是作用域的问题。
function fn(){
//定义了一个变量name
var num = 20;
//我现在想在外部访问这个变量num怎么办?不是有return,我把它返回出去,我再用个变量接收一下不就可以了.
return num;
}
var num= fn();//接收fn返回的num值。
alert(num);// 20;
这里的闭包就是利用函数的return。声明一个变量在外部接受。就可以访问到函数内部变量。
闭包有一个最大的特点就是通过闭包我们可以让函数中的变量持久保持。
function fn(){
var num = 0;
return function(){
num+=1;
alert(num);
};
}
var f = fn();
f(); //1
f(); //2
这段代码很简单,不要被它欺骗了,我们首页定义了一个fn函数,里面有个num默认为0,接着返回了一个匿名函数(也就是没有名字的函数)。我们在外部用f接收这个返回的函数。这个匿名函数干的事情就是把num加1,还有我们用来调试的alert。
这里之所以执行玩这个函数num没有被销毁是因为那个匿名函数的问题,因为这个匿名函数用到了这个num,所以没有被销毁,一直保持在内存中,因此我们f()时num可以一直加。
如果你觉得没什么,请看下面这个例子:
function fn(){
var num = 5;
num+=1;
alert(num);
};
fn(); //6
fn(); //6
因为函数一旦调用里面的内容就会被销毁,下一次调用又是一个新的函数,和上一个调用的不相关了
觉得写的不错的小伙伴点赞加关注哦! (=・ω・=)
网友评论