js系列-1.闭包的理解

68 阅读1分钟

闭包是什么

  • 是一种语法特性
  • 闭包 = 函数 + 自由变量
  • 对于一个函数来说,变量分为全部,本地,局部变量
var b = function () {
    var a = 1;
    return function () {
      console.log(a);
    }  // 这里的var a 和return的函数形成了闭包
  }()()

闭包解决问题

  • 隐藏变量(避免污染全局,所以用局部变量)
  • 维持变量,使其不被垃圾回收
  • 提供对局部变量的直接使用
var api = function () {
    let height = 20;
    return {
      getHeight: () => height,
      addHeight: () => height += 1
    }
  }()
  console.log(api.addHeight());
  console.log(api.addHeight());
  console.log(api.getHeight());

闭包缺点

旧版本的IE浏览器,会造成内存泄漏。但是这不是闭包的缺点,是浏览器自己的问题。

完!