【js】理解闭包

一、what?

闭包可以简单理解为:“定义在函数A内部的函数B”;其作用是让外部可以访问A内部变量

特性:

当外部调用函数A时,理论上函数执行完毕,它就要被弹出栈,但是由于B要用到A,所以A的变量被保存到内存中不被销毁。

这也导致了闭包中的变量是一直被保存的,除非手动清空 ,所以可以存储一些我们需要的状态和值

 

二、How?

 针对上边闭包的特性,它主要能做什么呢?

(1)嵌套的回调函数

//声明存值

function getsingle(callback){

    Post.get(req.session.user.name,function(err,posts){

        posts.forEach(item=>{

             if(item.goodsimage == image){

                console.log(item);

                sdetail = item;

                callback(sdetail);

            } 

        });

    });

}

//实现解开

getsingle(function(data){

    //除非里完成值的传递,上一级作用域拿不到里边的值

    res.render('detail',{

    title:'详情',

    detail:data

    });

});

(2)实现状态方法

或者说实现私有成员

var generateClosure = function() { 

    var count = 0; 

    var get = function() { 

        count ++;

        return count; 

    }; 

    return get; 

}; 

var counter = generateClosure(); 

console.log(counter());// 输出 1

console.log(counter()); // 输出 2

console.log(counter()); // 输出 3

count值的变化只能是调用enerateClosure()方法,外部并不能访问,所以说它是一个私有成员

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值