关于闭包的理解
js复习决定把闭包这个特性好好研究清楚
闭包是一种函数特性把,函数包含子函数,通过子函数访问自身变量,然后在讲子函数返回,达到普通函数做不到的特性
普通函数可以访问全局变量,但是不能访问其他函数的变量
var n = 1; function f1(){ alert(n); var b = 2; } f1(); //=> 1 function f2(){ alert(b); } f2(); // b is not defined
如果我们想访问其他函数中的值,我们可以用闭包
function f(){ var n = 1; function f1(){ n = n + 1; return n; } return f1; } var f2 = f(); //把返回的函数值赋给f2 alert(f2()); //=>2
我们也可以使用闭包来保存变量
上述代码,我们调用f2之后可以得到n的值,n的值没有随着f的调用之后消失
闭包就是定义在函数中能访问其他函数局部变量的函数,所以本质上闭包就是将函数内部和外部连接起来的一座桥梁。
缓存:最显而易见的好处,就是可以实现数据缓存,我们可以把一个需要长期用到的变量设为闭包函数的局部变量,在子函数里面直接使用它。因此局部变量只定义初始化一次,但我们可以多次调用子函数并使用该变量。这比起我们在子函数中定义初始化变量,多次调用则多次初始化的做法,效率更高。
实现封装:如同前面所说,闭包函数就如同一个“类”,只有在该闭包函数里的方法才可以使用其局部变量,闭包函数之外的方法是不能读取其局部变量的。这就实现了面向对象的封装性,更安全更可靠。