JS 中的闭包

常见的面试题什么是闭包

闭包是 JS 的一种 语法特性,其他语言也有这种特性
参考MDN上闭包的定义:
闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。

重点:闭包让开发者可以从内部函数访问外部函数的作用域。
举个例子:

const add2 = function (){
  var count = 0
  return function add (){ // 访问了外部变量的函数
  count += 1
  console.log(count)
}
}()
add2() //1
add2() // 2
  • 首先定义add2 是一个自动执行函数
  • 自动执行函数内部定义了局部变量 count
  • 自动执行函数返回值是函数 add
  • add2() 就等于调用add函数,所以打印结果为 1
  • add2() 再次调用add函数,所以打印结果为 2

我的理解

根据MDN 定义,闭包是一个函数以及其捆绑的周边环境状态的引用的组合。结合上面的例子闭包就是:
闭包 = 函数 add + 自由变量 a,

注意:闭包既不是 函数 add,也不是局部变量 a,而是二者组成的整体

闭包的优点

  • 避免全局污染
  • 提供了对局部变量的间接访问
  • 维持变量,使其不被垃圾回收

闭包的缺点

  • 使用不当会造成内存溢出,所以少用闭包
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 闭包的形成跟变量的作用域以及变量的生存周期密切相关 一、变量的作用域,是指变量的有效范围 当在函数中声明一个变量的...
    星空下的守望2018阅读 1,397评论 0 0
  • 一、首先简述什么是闭包 为什么会有闭包这个概念,我们知道函数内部可以直接读取全局变量,但是函数外部无法读取函数内部...
    周花花啊阅读 2,299评论 0 0
  • 「每日一题」JS 中的闭包是什么? 方应杭[https://www.zhihu.com/people/zhihus...
    7b7d23d16ab5阅读 1,001评论 0 0
  • 一、情景引入: 关于js的作用域,我们都知道: 1.js的作用域分两种,全局和局部 2.在js作用域环境中访问变量...
    追寻1989阅读 1,495评论 0 1
  • 闭包是js的一个难点也是它的一个特色,是我们必须掌握的js高级特性,那么什么是闭包呢?它又有什么用呢? 我们都知道...
    程序猿TODO阅读 2,286评论 7 0