//例子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的值不会被调用,就会被回收
参考文章
揭开Javascript闭包的真实面目