简单闭包的理解

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"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值