什么是闭包
概念: 是js中,函数的一种高级应用方式
作用: 调用函数中局部作用域变量,在函数之外,可以直接使用
正常情况下,只能使用 return 返回 局部作用域变量的数值,要想调用使用就必须要使用 闭包
return 只能返回一个数值,使用闭包的形式,可以返回调用,多个数值数据
闭包的执行条件
要使用执行闭包,必须要有3个条件,缺一不可
1, 在函数A中,直接返回一个函数B,函数A的返回值是另一个函数B
2, 函数B中,调用使用函数A中的局部作用域变量
3, 函数A 外部 有一个变量 存储接收 函数B
闭包的特点:
1, 函数,执行空间不会被销毁
优点: 空间中的内容,永远存在
缺点: 会占用大量的内存空间
2, 可以从函数外部调用,使用函数内部的数据
优点: 调用数据更加方便
缺点: 容易泄露数据信息,不安全
3, 保护私有变量
优点: 私有变量,不会被销毁
缺点: 私有变量存储占用空间缺点: 私有变量存储占用空间
闭包的必要性
闭包看上去是为了调用函数内的数据
实际是 为了 防止全局变量污染而采用的一个手段
如果是声明为全局作用域变量,只要是程序,就可以对这个全局变量进行参数
为了确保只有指定的特定的程序,可以操作变量,将变量定义为局部作用域变量
也就是将 变量 声明在函数中
但是要使用调用变量中存储的数据,理论上不能直接调用使用
因此,就有闭包这个程序执行方式,来调用函数内部的变量,存储的数值数据
执行函数完毕,执行空间会被销毁, 要想 调用 函数内部 声明的变量的数据,就要确保 执行空间不被销毁,
如何确保执行空间不被销毁
1,在函数内容部,返回一个引用类型(数组,对象,函数,以函数为主)
2,在函数的外部,有变量来引用这个函数
3,此时,函数的执行空间就不会被销毁
语法:
function fun2(){
let int = 100;
return function (){
console.log(int);
}
};