闭包----------------
首先,我先解释一下,在我的理解范围内闭包就是能够读取其他函数内部变量的函数,
在JS中,只有函数内部的子函数才能读取局部变量,这样的话也可以理解为闭包就是定义在一个函数内部的函数。
闭包代码:
function test(){
var x = 123 ;
function a(){
alert(x);
}
return a;
}
var temp = test();
temp(); //结果是123
说了这么多,为什么我们要用这个呢?要调用函数内部的变量我们用面对对象的方法一样的可以实现啊!
其实闭包的用处很多,有的我也不是太清楚,但是我觉得最重要的两个作用就是一个是能读取到函数内部的局部变量,另一个就是能让这些变量的值始终保持在内存当中。
说明代码如下:
function test(){
var x = 123 ;
x_add = function(){x+=1;}
function a(){
alert(x);
}
return a;
}
var temp = test();//调用了函数,同时也把变量保存在内存当中
temp();//结果为123
x_add();
//让内存中的变量+1,注意了这个方法前面没有用关键字var,所以他它是一个全局性的变量,而他对应的值是一个匿名函数(anonymous function),而这个匿名函数本身也是一个闭包,所以x_add相当于一个setter,可以在函数外部对函数内部的变量进行操作。但是还有一点值得注意的是这个x_add不能放在var temp = test()执行,因为x_add虽然是全局性的,但是它还是test这个函数内部的一个子函数,test要先执行,否则会出现x_add is unDifined;
var t= temp();//结果为124