前言
闭包的构成:
由俩个部分构成:函数+以创建该函数的环境
一、闭包
1.什么是闭包
函数嵌套函数 内部的函数可以访问外部函数的变量,就形成一个闭包。
(function() {
var a = 1;
function add() {
var b = 2
var sum = b + a
console.log(sum); // 3
}
add()
})()
add
函数本身,以及其内部可访问的变量,即 a = 1
,这两个组合在一起就被称为闭包。
2.闭包的作用
隐藏变量
闭包的一大特性就是内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后
3.闭包的优点
可以隔离作用域,不造成全局污染
3.闭包的缺点
由于长期驻留内存,长期这样会导致内存泄漏
增大内存的使用量
- 如何解决内存泄漏:将暴露在外部的闭包变量置为null
- 适用场景:封装组件,for循环和定时器结合使用,for循环和dom事件结合.可以在性能优化的过程中,节流防抖函数的使用,导航栏获取下标的使用
返回闭包的函数
function outer(){
var val = 0;
return function (){
val += 1;
document.write(val + "<br />");
};
}
var outObj = outer();
outObj();//1,执行val += 1后,val还在
outObj();//2
outObj = null;//val 被回收
var outObj1 = outer();
outObj1();//1
outObj1();//2
总结
什么是闭包?
MDN的解释:闭包是函数和声明该函数的词法环境的组合。
按照我的理解就是:闭包 =『函数』和『函数体内可访问的变量总和』
说白了就是函数嵌套函数,内部函数能够访问外部函数的变量