JavaScript闭包复习

61 阅读1分钟

闭包

一、概念

  • 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.闭包的作用

封闭数据,实现数据私有,外部也可以访问函数内部的变量,但是不可以随意更改。