最近刚开始在学习javascript,在函数和闭包这个知识点的时候有点犯糊涂
刚开始看到以下的一段代码,很是不理解function test()
{
var a=0;
return function()
{
return a++;
}
}
var b= test();
var c=b();
alert(c);//执行结果为0
var d=b();
alert(d);//执行结果为1
经过查资料和学习后初次有了个大概的了解:
1、第一个alert(c)的值如何来的,为什么?
javascript有一种特别的数据类型叫函数类型,既然是数据,那么就可以在函数中返回,这样的话以上的例子就可以理解了,test()返回了一个函数类型的数据给变量b,var c=b()就是执行函数func(){ return a++},所以第一个alert(c)的值就是0;
2、至于第二个alert(d)得到的为什么是1?
其中就涉及到闭包的问题!
什么是闭包?
自己也不是很理解,但有一种说法,个人感觉很好接受,一个函数内部的局部函数,被函数外部所引用,这样就创建了一个闭包,就是如上述例子函数test()里的匿名函数function()被函数外部的b所引用;
闭包有个特点就是函数在返回值后不像一般函数一样释放所占内存,而是依然保留,这样变量a的值还是保留着,所以第二次b()的时候,此时a=1,alert(d)当然返回的是1了;
初次学习,见识有限,理解难免有偏差,如有不正确的地方,还请指正,期望随着接下来学习的深入,对闭包会有更加真确的认识的应用!