function fn1() {
var a = 1;
function fn2() {
alert(a++);
}
return fn2; //返回出去的是一个引用类型的值
}
var f = fn1();
f();//执行完毕,会检查全局,这个函数没有被全局变量使用,如果有就不能回收
f();
f = 1;//fn1里面的变量都被销毁
f = fn1(); //重新调用
f();
eg2:
function findIndex1(){
var idx = -1;
function foo(){
return idx;
}
return foo;
}
// findIndex1();
// console.log(idx);
var b = findIndex1()()
console.log(b);
//闭包:需求:外部想使用内部定义的变量
// 实现:内部函数中 又定义了一个函数(访问变量的),返回这个函数
//闭包和返回值函数的区别:闭包返回的是内部函数(包装内部变量的),返回值函数返回的是普通变量
闭包理解:
函数1好比自己家,函数"foo"好比一个包装;
外部一个“b"想要用你家的"idx";
按照规则,你家的"idx"只能在你家使用,别人不能用;
但是你就是想要给外面的那个"b"使用;
于是你悄悄的把"idx"用包装"foo"包起来;
然后从你家里将包好的"idx" 扔出去,由外部的"b"接收到;
然后"b"拿到包装"foo"后一层一层拆开,拿到你家的"idx"。