我理解的闭包

2020-03-23  本文已影响0人  最帅的坏兔子

一、 变量的作用域

一个变量的作用域(scope)是程序源代码中定义这个变量的区域。按变量作用域可以将变量分为全局变量局部变量
全局变量:在JavaScript代码中任何地方都是有定义的。
局部变量:在函数体内部有定义,作用域是局限性的。

var a = 0; //  全局变量a
function foo1() {
  console.log('a = ', a);  // 结果为 a = 0
}
console.log('a = ', a);  // 结果为 a = 0
// --------------
function foo2() {
  var b = 10;  // 局部变量b
  console.log('a = ', a);  // 结果为 a = 0
  console.log('b = ', b);  // 结果为 b = 10
}
// console.log('b = ', b)  // 打开注释后报错结果为 Uncaught ReferenceError: b is not defined

foo1();
foo2();

二、 闭包

理解上面的变量作用域,下面我们看看,怎么在函数的外面获得函数内部变量。

function foo1() {
  var a = 20;
  // 闭包函数foo2
  function foo2() {
    console.log('a = ', a);
    return a;
  }
  return foo2;
}
var b = foo1()();  // a = 20
console.log(b);  // 20

foo1包含着一个函数foo2,foo2就是一个闭包。在我看来,闭包就是一个函数,这个函数在另一个函数体内部,并且向父函数的外部,返回父函数内部的变量。闭包函数是父函数内部变量与外界的桥梁。

三、闭包的用途

  1. 可以用来读取函数内部的变量。
  2. 可以将变量保存在内存中,不被垃圾回收机制回收。

四、闭包的优缺点

优点:可以在函数外部操作函数内部变量。
缺点:由于闭包会让函数体内变量常驻内存,滥用闭包会导致内存泄露,影响性能。

原文作者:最帅的坏兔子
技术博客:https://www.jianshu.com/u/259b7db6cc20
90后,爱编程,爱运营,文艺与代码齐飞,魅力与智慧共存的全栈开发一枚。
坚持总结工作中遇到的技术问题,坚持记录工作中所思所见,可以加小编微信一起交流学习:hxa2wangting13815。

上一篇 下一篇

猜你喜欢

热点阅读