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)回收。

JS初识闭包

上一篇:手动修复grub


下一篇:PHP中的国际化日历类