什么是闭包
概念:是js中函数的一种高级应用方式
作用:调用函数中局部作用域变量,在函数之外可以直接使用。正常情况下只能使用return返回局部作用域变量的数值,要想调用使用int就必须要使用闭包。return只能返回一个数值,使用闭包的形式可以返回调用多个数值
闭包的执行条件
要使用执行闭包,必须要有3个条件,缺一不可
①在函数A中直接返回一个函数B,函数A的返回值是另一个函数B
②函数B中调用使用函数A中的局部作用域变量
③函数A外部有一个变量存储接收函数B
闭包的特点:优点同时也是缺点
①函数执行空间不会被销毁
优点: 空间中的内容永远存在
缺点: 会占用大量的内存空间
②可以从函数外部调用,使用函数内部的数据
优点: 调用数据更加方便
缺点: 容易泄露数据信息,不安全
优点: 私有变量不会被销毁
缺点: 私有变量存储占用空间
// 定义一个函数A
function funA(){
// 函数A中有一个局部作用域变量
var int1 = 100;
var int2 = 200;
var int3 = 300;
// 函数A返回值是另一个函数B
// 函数A的执行结果,返回值就是函数B
return function funB(){
// 函数B中调用执行了函数A中的变量int3
var int4 = int1;
var int5 = int2;
var int6 = int3;
console.log(int4,int5,int6);
}
}
const f = funA();
funA();//执行结果为100,200,300
console.log(int1);//在函数外无法直接使用
let int = 100 ;
console.log(int);//输出结果为100
// 程序可以操作全局作用域变量
int = 200;
console.log(int);//输出结果为200
// 函数也能操作全局作用域变量
function fun1(){
int = '北京';
console.log(int);
}
fun1();//输出结果为北京
function fun2(){
// 局部作用域变量 / 私有变量只能被函数中的程序操作,函数外是无法操作的。确保int变量不会被误操作,也就不会造成全局变量濡染问题
let int = 300;
console.log(int);
// 只能是通过闭包来调用使用int中存储的数据
}
fun2();//输出结果为300