javascript的闭包的形成
//例子1 var a = 10086; function f1() { alert(a); } f1(); //999 //例子2:函数内部变量声明的时候,必须要用var 否则实际是声明了一个全局变量 function f2() { var b = 10086; } f2(); alert(b); //errer :b为定义 //例子3:例如c为全局变量 function f3() { c = 10086; } f3(); alert(c);// //========================== //例子2情况 我们需要访问b的值的时候怎么办呢 //这个时候f4内的所有变量对于getd都是可见的,但getd中的变量对f4却不可见 ,这样我们的f4函数就形成了闭包了。 //例子4 function f4() { var d = 10000; function getd() { alert(d); } return getd(); } // 闭包的定义:简单的可以理解为定义在函数内部的函数 // 闭包的用途:读取函数内部的变量,让变量的值保持在内存中 //例子5 function f5() { var n = 100086; Add = function () { n += 1 }; function getn() { alert(n); } return getn; } //这样调用的时候不会出现闭包的情况 f5();//这里输出10086 Add(); f5();//10086 //用fun变量,形成闭包 var fun = f5();//使用fun指向getn fun(); Add(); fun(); //当执行 var fun=f5() 时,变量fun实际指向了函数getn,getn中用到了变量n //当函数f5内部的函数getn被函数a外部变量引用的时候,就创建了一个闭包 //闭包的作用:在a执行完后并返回,闭包由于变量n被外部引用,导致资源不会被回收,所以n始终存在,如果我们返回的不是getn,那么n的值不会被调用,就会被回收