闭包是什么

以前听说过闭包也简单的了解过,一直以为闭包就是可以将函数作为对象或参数使用。
最近看书又看到关于这块的概念发现并非如此,所以就较真详细了解了一下闭包的概念。
有一些编程语言(如: javascrpt)中提供了函数对象的概念,有些人包括我认为这个就叫做闭包,其实这是不准确的。

  • 概念
    下面我查询了解了一下闭包的概念

1、闭包是指函数有自由独立的变量。换句话说,定义在闭包中的函数可以“记忆”它创建时候的环境。
2、在函数对象中,将局部变量及其环境封闭起来的结构被称为闭包。

  • 代码
    例如如下js代码:

    function  extent() {
      var n=0;
      return function() {
        n++;
        console.log("n="+n);
      }
    }
    f =extent();
    f();  //n的值为1
    f();  //n的值为2
    

如上代码,将带有 n 这个变量和环境封闭起来并可以供外部使用的结构就是闭包。

  • Ruby中的闭包
    其实在ruby中我们经常使用闭包,例如如下
    sum = 0
    10.times{|n| sum += n}
    print sum
    10.times 表示调用对象10的 times 方法,紧跟在这个调用后面的大括号里面的部分就是Block。Block 实际上就是匿名函数,它可以被调用,可以捕获上下文。因此上面的代码已经使用了闭包。

  • 应用场景
    1、保护函数内的变量安全。以最开始的JS为例,函数extent中n只有通过函数f才能访问,而无法通过其他途径访问到,因此保护了n的安全性。
    2、在内存中维持一个变量。如上JS,由于闭包,函数extent中n的一直存在于内存中,因此每次执行f(),都会给n自加1。

  • 使用闭包的注意点
    1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成性能问题
    2)闭包会在父函数外部,改变父函数内部变量的值。所以,一定要小心,不要随便改变父函数内部变量的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339

推荐阅读更多精彩内容

  • 大家好,我是IT修真院成都分院第6期的学员,一枚正直纯洁善良的前端程序员。今天给大家带来的是闭包是什么,用处如何?...
    lx2487阅读 365评论 0 1
  • 大家好,我是IT修真院深圳分院第01期学员,一枚正直善良的web程序员。 今天给大家分享一下,修真院官网 JS任务...
    长天_阅读 406评论 0 2
  • 大家好,我是IT修真院北京分院25期的学员,一枚正直纯洁善良的web前端程序员 今天给大家分享一下,修真院官网js...
    be684ac78b0c阅读 270评论 0 0
  • 大家好,我是IT修真院北京分院22期的学员,一枚正直纯洁善良的web前端程序员 今天给大家分享一下,修真院官网js...
    古碑先生阅读 317评论 0 0
  • 有一只蛙,它的生活环境很奇特,生活在燥热的沙漠之中。 它几乎不说话,每天像闷油瓶似的闲逛。仙人掌说它“你不应该生活...
    思兹念兹阅读 211评论 0 1