一,闭包是什么
闭包是:函数内部和函数外部连接的桥梁;可以读取其他函数内变量的函数;
可以访问外部函数的变量,并将这些变量保存在内存中,供内部函数在外部函数执行完毕后继续使用;
常被用于工厂函数、模块化等场景。
二,闭包优缺
优点:①保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突; ②在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存);③匿名自执行函数可以减少内存消耗
缺点:①其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null; ②其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响
三,闭包示例
1.函数赋值
function aFunction(){
let aName = 'hello'; function bFunction(){ //处理数据 console.log(aName) } return bFunction; }
var c = aFunction()
c(); // 输出:hello
在这个例子中,aFunction是外部函数,它声明了一个变量aName。内部函数bFunction可以访问外部函数的aName
变量,并在执行时输出该变量的值。aFunction
执行后返回了bFunction
,此时bFunction
仍然可以访问到aName
。这就是一个简单的闭包示例。
2.返回值
function aFunction(){
var name = 'hello'
return function (){return name}
}
aFunction();//输出:hello
3.循环赋值(定时器与闭包)
let块级作用域,每次迭代都会声明
for(let i= 1;i<10;i++){
setTimeout(
function(){//打印i}
,1000);
}
标签:闭包,函数,bFunction,js,内存,aFunction,变量 From: https://www.cnblogs.com/alizhi/p/17654631.html