关于闭包的一些理解

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

先看一段代码:

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;
		}
	}
})

猜你喜欢

转载自blog.csdn.net/weixin_40135101/article/details/81360105