JS闭包总结

任何在函数内部定义的变量,都是私有变量,因为这些变量在函数外部是无法访问到的。但是在函数内部创建闭包,闭包通过自己的作用域链也可以访问这些变量,利用这一特点,就可以创建用于访问私有变量的公共方法。

1、定义

  • 有权访问另一个函数作用域的函数
  • 函数可以记住并访问其词法作用域,无论这个函数是在当前词法作用域之内还是之外执行

2、三种情况

  • 函数作为返回值
  • 函数作为参数传递
  • 作用域中子级访问父级变量(作用域链)

3、三个特性

  • 函数嵌套函数
  • 函数内部可以引用外部的参数和变量
  • 参数和变量不会被垃圾回收

4、优点

  • 设计私有的方法和变量
  • 避免全局变量的污染

5、闭包的内存销毁

销毁机制:垃圾回收机制

人为销毁:

①关闭网页,结束js运行环境

②为变量赋值为null

6、举例

function foo() {
   var a = 2;

   function bar(){
      console.log(a);
   }

   return bar;
}

var test = foo();   //foo()函数返回bar函数,并赋值给test

test();   //2    其实是在执行bar()函数

注释:由于foo()返回bar函数,所以foo()执行后,内部作用域不会被回收,bar()依旧持有对该作用域的引用。而这个引用就叫闭包。

猜你喜欢

转载自blog.csdn.net/qq_34309704/article/details/80730185