//1.什么是闭包? 方法里面调用方法
//2.闭包存在的意义--1.延长变量的生命周期 2.创建私有环境
//作用域链 查找规则:就近原则
let a = 1;
function fn1(){
let b = 2;
console.log(a);
}
// console.log(b)
fn1();
如图a是全局变量,b是局部变量。所以无论在哪里都可以获取到a的值,而在方法外(闭包外)就无法获取b的值,所以输出结果为1。
//沟通内外部方法桥梁
function outer(){
let a1 = 111;
let a2 = 222;
return function inner(){
return a1;
}
}
function fn5(){
let getInnerdata = outer();
console.dir(getInnerdata);
}
fn5();
//闭包会常驻内存=>慎用闭包
领域内有闭包只return了一个a1,所以closure只有a1。
它会一直存在在dir中,所以说会常驻内存,所以要谨慎用闭包
let makeCount = function(){
let num = 0 ;
function changeBy(val){
num+=val;
}
return{
add:function(){
changeBy(1);
},
reduce:function(){
changeBy(-1);
},
value:function(){
return num;
}
}
}
let count1 = makeCount();
let count2 = makeCount();
count1.add()
count1.add()
count2.add()
console.log(count1.value());
console.log(count2.value());
以上代码的输出结果是count1的value为2;count2的value为1。
可以这样解释,他们虽然都在同一个方法下,但是彼此之间却互不干扰。就好比一个父亲有两个儿子,但是两个儿子分别有自己的家庭,互相独立的关系。故count1加了两次,count2加的一次是重新计算的一次。