、、1、例子

  1. /* 1、如何从函数外部读取局部变量 */
  2. function fn1(){
  3. var n = 999;
  4. return function(){
  5. n++;
  6. console.log(n)
  7. }
  8. }
  9. var result = fn1();
  10. /*
  11. result = function(){
  12. n++;
  13. console.log(n);
  14. }
  15. */
  16. result();
  17. result();
  18. result();
  19. console.log(n)

不想让一个变量造成全局污染,同时需要其常驻内存就可以使用闭包

2、作为返回值的函数

会从函数定义的地方查找

  1. function test(){
  2. var a = 1;
  3. return function(){
  4. console.log(a);
  5. }
  6. }
  7. const fn = test();
  8. const a = 2;
  9. fn();

3、函数作为参数

  1. /* 函数作为参数 */
  2. function test(fn){
  3. var a = 1;
  4. fn(a);
  5. }
  6. var a = 20;
  7. function fn(){
  8. console.log(a);
  9. }
  10. //定义fn函数的时候,它会和它周边的状态捆绑在一起
  11. test(fn); //从函数执行的地方查找

闭包:一个函数和它的周边状态的引用捆绑在一起的组合