1.什么是闭包
字面理解:闭:关闭,封闭的意思,对外界不开放的。包:包装起来,包裹起来
我们都知道内层的作用域可以访问外层的作用域,但是反过来不行,但是有的时候,我们确实需要访问一个封闭空间中的数据,闭包就是这样一种间接访问封闭空间中私有数据的技术.下面是一个简单的例子
function func1(){
var b=100;
return function () {
return b;
}
}
var res=func1()();
console.log(res);-->100
/*我们在函数func1外部无法直接访问局部变量b,
但在func1内部的方法却可以访问并返回同级的变量b。
func1()一个括号代表func1内返回的函数本身,
func1()()再加一个括号代表调用这个函数。*/
闭包还有另外一种形式简单说一下:
(function(a,b){
console.log( a+b);
})(1,2);/*第一个括号表示函数的定义,第二个括号表示
函数的调用,这里相当于一个立即执行函数。*/
2.用闭包设置或读取数据
注意:用闭包只能获取值,但是却不能修改值,看下面的代码
function foo(){
var name = "zs";
return {//与前面不同这里返回的是一个对象
getName:function(){//获取属性
return name;
},
setName:function(nameValue){//设置属性
name = nameValue;
},
}
}
var func = foo();
console.log(func.getName());-->zs
func.setName("张校长");
console.log(func.getName());-->张校长
3.闭包的作用
01 创建一个私有的空间,保护数据,外界如果需要访问数据必须通过函数提供的指定方法。
02在这些指定的方法中,我们可以设置一些校验的逻辑,以保证对数据访问和设置的安全性。
03 闭包可以延长变量的生命周期,这里可能有些不太好理解,普通的局部变量,在函数调用完成后被销毁,但是使用闭包后,因为每次调用外层函数都会返回内部局部变量,也就是这个引用必须一直存在,所以变量不会被销毁。
闭包会占用大量内存,所以我们使用的时候要慎重。
4.闭包的应用 ##
定时器应用,div事件应用…待补充