关于闭包的一些理解

闭包是什么? ——可简单理解为:有权访问另一个函数作用域内变量的函数都是闭包。

先看一段代码:

function add(){
    var n = 0;
    function inc(){
        n++;
        console.log(n);
    }
    return inc;
}
var test = add();  //注意:add()返回的是函数inc,那么这句话等同于 var test = inc;
test();  //test()  这句话等同于 inc()
test();

最后那三句话就相当于

var test = inc; //此时没有执行inc(),只是把test的指针指向inc的内存。

inc();

inc(); 


每个function就像一个独立的空间,别人是不能直接看不到里面的东西的。但是add()返回了一个函数inc,这就把add()里面的自由变量(inc中使用的变量)和外部联系起来,给外部访问自由变量n提供了一个出口,这就是闭包。

闭包的一个简单应用:封装

封装有一个很重要的作用就是信息隐藏,如果我们要把一些可见的和不可见的东西分开,可见的可以暴露给外部,不可见的不可以暴露给外部,这时候就可以使用闭包。

对于下面的例子,object就是一个闭包,它返回了一个对象。这个对象返回的属性是一组函数,这就是对外暴露的一组接口。这些接口可以共享一个自由变量num[],这个num[]是不能直接被外部访问的,但在暴露的这些接口里面都可以访问它,这样就做到了封装的作用。

var object = (function(){
	var num = [];
	return{
		add:function(obj){
			num.push(obj);
		},
		length:function(){
			return num.length;
		},
		get:function(){
			return num;
		}
	}
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值