闭包

什么是闭包?

  • 函数在执行的过程中,先从自己内部找变量
  • 如果找不到,再从创建当前函数所在的作用域(词法作用域)去找, 以此往上
  • 注意找的是变量的当前的状态

函数连同它作用域链上的要找的这个变量,共同构成闭包

  • 实例一
function car(){
  var speed = 0
  function fn(){
    speed++
    console.log(speed)
  }
  return fn
}

var speedUp = car()
speedUp()   //1
speedUp()   //2

fn和变量speed构成一个闭包

  • 实例二
!function(){

  var lives = 50

  window.addOneLife = function(){
    lives += 1
    console.log('当前lives:', lives)
  }

  window.reduceOneLife = function(){
    lives -= 1
    console.log('当前lives:', lives)
  }

}()
addOneLife() //51
addOneLife() //52

function(){lives += 1;console.log('当前lives:', lives)}和lives构成一个闭包
function(){lives -= 1;console.log('当前lives:', lives)}和lives又是一个闭包

闭包有什么用呢?

1.访问其他函数内部的变量

上述实例一的speed以及实例二的lives都是定义在外部函数中,而内部的函数却可以访问到

2.暂存数据

上述实例一中的speedUp 以及实例二中的addOneLife 、reduceOneLife 是全局一直存在的,除非页面销毁。因此他们对应的声明的函数就一直存在,因此函数内部的变量speed,lives就一直存在

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、作用域 A、定义 代码在运行时,各个变量、函数和对象的可访问性。换句话说,作用域决定了你的代码里的变量和其他资...
    5吖阅读 3,938评论 0 1
  • 本章将会介绍 闭包表达式尾随闭包值捕获闭包是引用类型逃逸闭包自动闭包枚举语法使用Switch语句匹配枚举值关联值原...
    寒桥阅读 5,470评论 0 3
  • 感觉有点难懂,可以参考https://www.jianshu.com/p/49e7a29a2698 闭包是自包含的...
    CDLOG阅读 3,851评论 0 0
  • 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代...
    莽原奔马668阅读 5,873评论 2 12
  • 求职面试中,没有人能保证不犯错误,比起那些明显常识性的错误,还有一些意识不到的表现也是在犯错误,相当部分机智的求职...
    职典阅读 2,271评论 0 0

友情链接更多精彩内容