无时无刻不在用“闭包”

2021-12-02 08:10:42 +08:00
 AndyAO

global 是开包,大家都可以访问; local 是闭包,只有函数内部可以访问。

只要你使用函数,你就在用闭包。

在正常的情况下,闭包会随着任务的结束而被销毁,它没有什么存在感。

但是!如果将闭包的引用抛到外面,那么就可以在任何地方持续访问它。

这是个很神奇的情景,如果在现实生活中你有个闭包,就意味着有个这个世界上只有你才能进去的私人空间,你完全可以报复自己的仇人,然后溜进自己的闭包当中,别人只能干瞪眼,他们挖地三尺也找不到你。

普通的闭包太过寻常,太过短暂,以至于大家都忘记它的名字,现在“闭包”特指那些没被销毁的。

5597 次点击
所在节点    程序员
29 条回复
qiaobeier
2021-12-02 09:09:16 +08:00
你晚上睡不着想出来的东西吗?
marcong95
2021-12-02 09:18:09 +08:00
古人云:学而不思则罔,思而不学则殆

《论程序员不学编译原理的危险性》
《也论程序员不学英语的危险性》
acmore
2021-12-02 09:29:06 +08:00
玄幻小说里我们管这个叫内天地
2i2Re2PLMaDnghL
2021-12-02 09:32:31 +08:00
你说的是『词法作用域』

准确地说,闭包是指某个词法作用域没有(或者不会)随生命周期销毁,强制了相关内存不能开在栈上,所以要把构造和访问行为单独封装出来。
ziseyinzi
2021-12-02 09:34:29 +08:00
你这种症状持续多久了
xuyang9978
2021-12-02 09:34:38 +08:00
@acmore 看到后面我也想到小说了
abersheeran
2021-12-02 09:50:32 +08:00
把本函数的 locals 叫闭包,这真是前无古人……
MrCurly
2021-12-02 09:52:24 +08:00
我们一般管这个叫识海之类的,但是由于现实世界太过复杂,还是有能够侵入对方识海并且夺舍的高阶功法,而且精神遁入识海的时候肉体还外显,所以不安全。另一种就是高阶修士炼制的小天地法宝,这种可以做到将肉体放入小天地,但是小天地的本体还是在现实世界外显的,所以可以用强力毁掉小天地本体。也就是说现实世界再怎么闭包都一定有一个回到现世的媒介,我只在小说里见到过特别离谱的法宝,现实世界还没见过。
所以一看楼主就是连金丹都没到识海没开辟的修仙萌新,而且家里也没老祖宗教你修仙常识,高阶功法小天地更是没有,还是老老实实编程吧。
Borch
2021-12-02 10:27:41 +08:00
还能像初高中生一般精力过于充沛才瞎鸡儿想不容易啊
Augi
2021-12-02 10:36:08 +08:00
这不就是「领域」么
tabris17
2021-12-02 10:39:25 +08:00
学会闭包前,不如先学会闭嘴吧
robinlovemaggie
2021-12-02 10:39:26 +08:00
楼主显然把汉语“龟缩”和英文“Closure”弄混淆了。
YuxiangLuo
2021-12-02 10:40:49 +08:00
global 不是开包,global 恰巧是闭包带来的效果; local 不是闭包,它只是一个 scope ( environment )

如果你说的是 js ,那么 ECMAScript 规范里的这句代码告诉我们,闭包(closure)是一个带着 scope(scope chain)的函数——

Let closure be OrdinaryFunctionCreate(%Function.prototype%, sourceText, FormalParameters, FunctionBody, non-lexical-this, scope).


闭包确实可以用来实现某种意义上的“私人空间”,但是一提到闭包就说“私密性 /变量污染”是纯粹的本末倒置。
baolinliu442k
2021-12-02 10:46:15 +08:00
欠拟合了
xiebruce
2021-12-02 11:16:39 +08:00
@YuxiangLuo 那如果问闭包的作用是什么,应该怎么回答?
dingwen07
2021-12-02 11:25:12 +08:00
closure 。。。
Jooooooooo
2021-12-02 11:28:48 +08:00
?

真如 2 楼所说, 科班的教科书还是要好好学.
sl0000
2021-12-02 11:33:23 +08:00
闭包=函数+外部参数
12101111
2021-12-02 12:51:21 +08:00
闭包就是使用定义函数的语法创建一个匿名的捕获对象 + 方法
cmdOptionKana
2021-12-02 12:57:53 +08:00
啥是开包啊,开包的英文的什么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/819440

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX