闭包

闭包是什么

「函数」和「函数内部能访问到的变量」(也叫环境)的总和,就是一个闭包。简单说,就是一个函数用到了它外面的变量,这种用法叫闭包。

看个例子

function foo(){
  var local =1
  function bar(){
    local +=1
    return local
  }
  return bar
}
var func = foo()
func()

local 变量和 bar 函数组成了一个闭包。

闭包的作用

闭包常常用来间接访问一个变量,换句话说,就是隐藏一个变量。

假设我们在做一个游戏,在写其中关于「还剩几条命」的代码。

如果不用闭包,你可以直接用一个全局变量:

var lives = 30

万一有人把这个改了怎么办?用局部变量

但是用局部变量别人又访问不到,怎么办呢?

暴露一个访问器(函数),让别人可以「间接访问」

!function(){
  var lives = 30
  function award(){
    lives += 1
  }
  function die(){
    lives -= 1
  }
}()

lives 变量和 award 函数组成了一个闭包,lives 变量和 die 函数又组成了一个闭包。

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

推荐阅读更多精彩内容

  • 本章将会介绍 闭包表达式尾随闭包值捕获闭包是引用类型逃逸闭包自动闭包枚举语法使用Switch语句匹配枚举值关联值原...
    寒桥阅读 5,438评论 0 3
  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量...
    zock阅读 4,680评论 2 6
  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量...
    zouCode阅读 5,013评论 0 13
  • 录屏gif软件:licecap下载[http://download.csdn.net/detail/pyy9107...
    凯文Kevin21阅读 1,319评论 0 1
  • 读史铁生的《奶奶的星星》感触颇深,得知这本书是因为观看了热播的《朗读者》栏目,我从小是外婆拉扯大的,对我来说,外婆...
    Polly湘儿阅读 1,170评论 0 0