问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何理解闭包

发布网友 发布时间:2022-04-13 02:05

我来回答

2个回答

热心网友 时间:2022-04-13 03:35

定义和用法:当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的其它变量,如果返 回的这个函数在外部被执行,就产生了闭包。 2、表现形式:使函数外部能够调用函数内部定义的变量。 3...

热心网友 时间:2022-04-13 04:53

闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
闭包包含自由(未绑定到特定对象)变量,这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。在PHP、Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Go、Lua、objective c、swift 以及Java(Java8及以上)等语言中都能找到对闭包不同程度的支持。
闭包 (closure)是个精确但又很难解释的电脑名词。在 Perl 里面,闭包是以 匿名函数的形式来实现,具有持续参照位于该函数范围之外的文字式变数值的能力。这些外部的文字变数会神奇地保留它们在闭包函数最初定义时的值 (深连结)。
如果一个程式语言容许函数递回另一个函数的话 (像 Perl 就是),闭包便具有意义。要注意的是,有些语言虽提供匿名函数的功能,但却无法正确处理闭包; Python 这个语言便是一例。如果要想多了解闭包的话,建议你去找本功能性程式 设计的教科书来看。Scheme这个语言不仅支持闭包,更鼓励多加使用。
以下是个典型的产生函数的函数:
sub add_function_generator {
return sub { shift + shift };
}
$add_sub = add_function_generator();
$sum = &$add_sub(4,5); # $sum是 9了
闭包用起来就像是个函数样板,其中保留了一些可以在稍後再填入的空格。add_function_generator() 所递回的匿名函数在技术上来讲并不能算是一个闭包, 因为它没有用到任何位在这个函数范围之外的文字变数。
把上面这个例子和下面这个make_adder()函数对照一下,下面这个函数所递回的匿名函数中使用了一个外部的文字变数。这种指明外部函数的作法需要由 Perl递回一个适当的闭包,因此那个文字变数在匿名函数产生之时的值便永久地被锁进闭包里。
sub make_adder {
my $addpiece = shift;
return sub { shift + $addpiece };
}
$f1 = make_adder(20);
$f2 = make_adder(555);
这样一来&$f1($n) 永远会是 20加上你传进去的值$n ,而&$f2($n) 将 永远会是 555加上你传进去的值$n。$addpiece的值会在闭包中保留下来。
闭包在比较实际的场合中也常用得到,譬如当你想把一些程式码传入一个函数时:
my $line;
timeout(30,sub { $line = <STDIN> });
如果要执行的程式码当初是以字串的形式传入的话,即'$line = <STDIN>' ,那么timeout() 这个假想的函数在回到该函数被呼叫时所在的范围后便无法再截取$line这个文字变数的值了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 云南临沧市有什么好玩的地方 红花茶油和红花山茶油有什么区别? 为什么脸上涂了初榨红花山茶油后,长痘的地方又红又肿,像过敏,停用后虽好了些,但痘痘就一直没消停过? 急性粒细胞白血病M4型 急性粒细胞白血病m2型,我想详细了解一下 急性粒细胞性白血病 急性粒细胞性白血病的治疗方案 急性粒细胞性白血病M1的治疗方案 急性粒细胞白血病有什么好办法治疗 急性粒细胞白血病的治疗方法 回收站有东西删不掉 桌面上会多出一个回收站删不掉怎么办? 高蛋白,低脂肪的食物有哪些 海盐人民银行周末上班吗 php 闭包嵌套 变量如何使用 php闭包和js闭包的区别 php 什么时候使用闭包 百万商品一件代发微信 微信里那些一件代发的微商真的是批发商么 我在微信做一件代发的代理四年了,现在想开实体店装修完毕。我现在怎么给朋友圈说呢 求好看的情侣头像,谢谢,越多越好 谁有好看的情侣头像,跪求 找些好看点的情侣头像 谁有好看的情侣头像啊一左一右那种 求一对一左一右的好看情侣头像 报考2019年国家公务员考试对专业有什么要求吗? 2019年国考 考些什么内容 PHP有办法在闭包外部得到闭包内部的变量吗 鼠标表面很粘手怎么清洗? 鼠标上沾染了一层黏黏的污泥怎样去除 需要开通网银吗 怎么开通信用卡分期付款 糯米红豆粥红豆煮多久放糯米 糯米绿豆粥要加什么不会变色 大米糯米饭豆粥加蜂蜜可吃吗 糯米红豆粥对骨骼的愈合有没有好处 糯米黑米.绿豆粥 刨腹产能不能喝红米黑米糯米红豆粥? 死神官方小说白粥 请有死神官方小说的发给我(白哉相关)《白粥》《糯米年糕豆粥》《咖喱饭》,TXT格式,谢 跪求死神官方小说 《瀞灵廷的阴谋之秋》《糯米年糕豆粥》《咖喱饭》《白粥》《另一个冰轮丸》《呼唤君之名