1,什么是闭包
闭包就是能够读取其他函数内部变量的函数。
2,闭包的原理:
就是作用域访问原则,上级作用域无法直接访问下级作用域中的变量。
3,实现闭包要解决什么问题:
闭包内的数据不允许外界访问,要解决的问题就是间接访问该数据。函数内部的函数中可以访问该函数中的变量,但是我们需要在函数外部来访问函数中的变量。
4,怎么解决:
函数内部的方法可以访问该函数中的变量,我们可以把这个方法return 出去,函数外部就可以调用这个函数内部的方法来访问函数内部的变量了。
function foo(){
var num =123;
return function(a){
if(a !== undefined){
//如果传参了,就用来设置值
num =a;
}else{
//不传参,用来获取值
return num;
}
console.log(num);
}
}
var fun1=foo();
fun1(456);
var num=fun1();
console.log(num);
5,使用对象返回多个方法,来获取和设置值
function fun (){
var name ="jack"
var age =18
return {
getName:function(){
return name;
},
setName:function(value){
name = value;
},
getAge:function(){
return age;
},
setAge:function(value){
age = value;
}
}
}
var obj = fun();
obj.setName("rose");
console.log(obj.getName())
6,闭包的作用
基本作用:可以通过闭包返回的函数或者方法,来修改函数内部的数据。
保护作用: 创建一个私有的空间,保护数据,外部想要访问内部的数据,只能通过函数提供的方法,在这些方法中我们可以设置一些逻辑,让数据变得安全。
7,闭包一般和立即执行函数一起使用
for(var i=0 ;i<arr.length;i++){
arr[i].onClick = (function(i){
return function(){
alert(i)
}
})(i)
}