JS初识闭包
JS初识闭包
以如下代码为例
function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){ // 函数f2根据js作用域链拥有对其父函数f1的变量与内部函数的访问圈钱 <1式>
alert(n);
}
return f2; // 返回对函数f2的引用 <2式>
}
var result=f1(); //由于<2式>,全局变量result赋值为函数内部函数f2的一个引用
//由于<1式>,result拥有对f1函数内部变量的访问权限
result(); // 999
nAdd(); // 函数内部定义时不加var定位为全局变量(仅在实现闭包后可调用)
// nAdd()作为f1()的一个set赋值器
result(); // 1000
// ***在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
// **在本例中,如果把父函数f2当作对象使用,闭包基本实现了使得对象拥有*私有属性*与*私有方法*的功能。
// *ps:由于f2赋值给全局变量result,且f2依赖于f1,因此f1与f2始终在内存中保留,而不会在调用结束后,被垃圾回收机制(garbage collection)回收。
moyutime:本文仅是学习心得,观点仅供参考,祝愿读者学习途中快乐且不断有所收获。