闭包
一、概念
-
1.一个函数对周围状态的引用绑定在一起,内层函数中访问到其外层函数的作用域
-
2.简单理解:闭包 = 内层函数 + 外层函数变量
-
3.理解:首先里面有一个函数,这个函数外面有一个变量,这两个一起构成了我们的闭包。 有一个内层函数,还有一个外层函数,内层函数要用到外层函数的变量,这时才会产生闭包。
- 4.代码举例1:
function outer(){
const a = 1;
function f() {
console.log(a);
}
f();
}
outer();
-
5.闭包作用:封闭数据,提供操作,外部也可以访问函数内部的变量。
-
6.代码举例2:-闭包的基本格式
function outer(){
let a =1;
function fn(){
console.log(a);
}
return fn; //这个return的返回值是outer函数的返回值
}
const fun =outer(); // 此时outer() = function fn(){ console.log(a);}
//outer()里面装着函数fn,fun = function fn(){cosnole.log(a); },所以fun() = function fn(){}();
fun(); //调用函数
7.闭包应用:实现数据的私有,外界无法轻易改变闭包里的值
8.需求:我们要做个统计函数调用次数,函数调用一次,就++
代码举例:
function count() {
let i = 0;
function fn(){
i++;
console.log(i);
}
return fn;
}
const fun = count();
fun();
fun();
fun();
9.闭包的缺点:
可能会出现内存泄漏的问题,因为外部的全局变量引用局部变量会一直存在,浏览器的标记清除法会认为一直存在就不会回收局部函数里的变量
10.闭包的作用
封闭数据,实现数据私有,外部也可以访问函数内部的变量,但是不可以随意更改。