闭包
函数内部的局部作用域变量 不能在函数外部直接调用
因为函数执行结束 执行空间就会被销毁 局部作用域变量也会被销毁释放
// 定义
闭包就是生成一个 不会被销毁的执行空间
延长局部作用域变量的生存周期
// 如何生成一个不会被销毁的执行空间
函数return的是引用数据类型,
函数外有变量存储 函数的执行结果返回值
函数的执行空间不会被销毁
在函数外部 可以 操作函数内部的局部作用域变量
// 什么要用闭包
因为 JavaScript 存在 全局变量污染
也就是 全局变量 非常容易被其他程序(函数等)误操作
为了保证数据的安全 往往需要将全局变量设定成 函数的局部变量
再通过闭包的语法 调用操作 最后变量数据
// 闭包的优缺点
(1) 优点 创建一个不会被销毁的存储空间 缺点 占用内存
(2) 优点 延长变量的生存周期 缺点 容易造成数据泄露
(3) 优点 保护变量不会受到全局变量污染 数据更安全 缺点 调用使用比较麻烦
//闭包语法的基本总结
1, 闭包语法的基本套路
函数return函数
使用变量存储 调用变量 就是调用return的函数
2, 实际项目中一般使用立即执行函数的语法形式
标签对象.addEventListener( 事件类型 , ( function(形参){
let 变量 = 形参
return function(){
console.log( 变量 )
};
} )( 实参i ) )
// 函数a
function a(){
// 函数a的局部作用域变量
let a = 100 ;
let b = 200 ;
// return 的是 函数b
return function(){
// 函数b中设定要对函数a局部变量的操作
console.log( a+b );
}
}
// 在函数a外部 使用变量存储函数a的执行结果返回值
// 变量res中存储的是函数a return 的 匿名函数的内存地址
const res = a() ;
// 调用变量res 就是 通过变量res中存储的内存地址
// 调用 函数a return 的匿名函数
// 匿名函数的程序 就是我们想要操作 局部变量a 局部变量b 执行的程序
res()