global 是开包,大家都可以访问; local 是闭包,只有函数内部可以访问。
只要你使用函数,你就在用闭包。
在正常的情况下,闭包会随着任务的结束而被销毁,它没有什么存在感。
但是!如果将闭包的引用抛到外面,那么就可以在任何地方持续访问它。
这是个很神奇的情景,如果在现实生活中你有个闭包,就意味着有个这个世界上只有你才能进去的私人空间,你完全可以报复自己的仇人,然后溜进自己的闭包当中,别人只能干瞪眼,他们挖地三尺也找不到你。
普通的闭包太过寻常,太过短暂,以至于大家都忘记它的名字,现在“闭包”特指那些没被销毁的。
![]() | 1 qiaobeier 2021-12-02 09:09:16 +08:00 ![]() 你晚上睡不着想出来的东西吗? |
![]() | 2 marcong95 2021-12-02 09:18:09 +08:00 ![]() 古人云:学而不思则罔,思而不学则殆 《论程序员不学编译原理的危险性》 《也论程序员不学英语的危险性》 |
3 acmore 2021-12-02 09:29:06 +08:00 ![]() 玄幻小说里我们管这个叫内天地 |
4 2i2Re2PLMaDnghL 2021-12-02 09:32:31 +08:00 你说的是『词法作用域』 准确地说,闭包是指某个词法作用域没有(或者不会)随生命周期销毁,强制了相关内存不能开在栈上,所以要把构造和访问行为单独封装出来。 |
![]() | 5 ziseyinzi 2021-12-02 09:34:29 +08:00 ![]() 你这种症状持续多久了 |
![]() | 6 xuyang9978 2021-12-02 09:34:38 +08:00 @acmore 看到后面我也想到小说了 |
![]() | 7 abersheeran 2021-12-02 09:50:32 +08:00 ![]() 把本函数的 locals 叫闭包,这真是前无古人…… |
![]() | 8 MrCurly 2021-12-02 09:52:24 +08:00 ![]() 我们一般管这个叫识海之类的,但是由于现实世界太过复杂,还是有能够侵入对方识海并且夺舍的高阶功法,而且精神遁入识海的时候肉体还外显,所以不安全。另一种就是高阶修士炼制的小天地法宝,这种可以做到将肉体放入小天地,但是小天地的本体还是在现实世界外显的,所以可以用强力毁掉小天地本体。也就是说现实世界再怎么闭包都一定有一个回到现世的媒介,我只在小说里见到过特别离谱的法宝,现实世界还没见过。 所以一看楼主就是连金丹都没到识海没开辟的修仙萌新,而且家里也没老祖宗教你修仙常识,高阶功法小天地更是没有,还是老老实实编程吧。 |
![]() | 9 Borch 2021-12-02 10:27:41 +08:00 还能像初高中生一般精力过于充沛才瞎鸡儿想不容易啊 |
![]() | 10 Augi 2021-12-02 10:36:08 +08:00 via iPhone 这不就是「领域」么 |
![]() | 11 tabris17 2021-12-02 10:39:25 +08:00 ![]() 学会闭包前,不如先学会闭嘴吧 |
![]() | 12 robinlovemaggie 2021-12-02 10:39:26 +08:00 楼主显然把汉语“龟缩”和英文“Closure”弄混淆了。 |
![]() | 13 1KN6sAqR0a57no6s 2021-12-02 10:40:49 +08:00 ![]() global 不是开包,global 恰巧是闭包带来的效果; loal 不是闭包,它只是一个 scope ( environment ) 如果你说的是 js ,那么 ECMAScript 规范里的这句代码告诉我们,闭包(closure)是一个带着 scope(scope chain)的函数 Let closure be OrdinaryFunctionCreate(%Function.prototype%, sourceText, FormalParameters, FunctionBody, non-lexical-this, scope). 闭包确实可以用来实现某种意义上的“私人空间”,但是一提到闭包就说“私密性 /变量污染”是纯粹的本末倒置。 |
14 baolinliu442k 2021-12-02 10:46:15 +08:00 欠拟合了 |
15 xiebruce 2021-12-02 11:16:39 +08:00 @YuxiangLuo 那如果问闭包的作用是什么,应该怎么回答? |
![]() | 16 dingwen07 2021-12-02 11:25:12 +08:00 closure 。。。 |
17 Jooooooooo 2021-12-02 11:28:48 +08:00 ? 真如 2 楼所说, 科班的教科书还是要好好学. |
![]() | 18 sl0000 2021-12-02 11:33:23 +08:00 闭包=函数+外部参数 |
![]() | 19 12101111 2021-12-02 12:51:21 +08:00 闭包就是使用定义函数的语法创建一个匿名的捕获对象 + 方法 |
![]() | 20 cmdOptionKana 2021-12-02 12:57:53 +08:00 啥是开包啊,开包的英文的什么? |
21 GuuJiang 2021-12-02 12:59:10 +08:00 via iPhone 找个厂子上班去吧,求你了 |
![]() | 22 maplelin 2021-12-02 15:24:52 +08:00 js 红宝书里面描述广义上的闭包就是具有封闭词法作用域的东西,所以广义上只要声明了一个函数就算创建了一个闭包。 |
![]() | 23 vanton 2021-12-02 15:29:51 +08:00 你这个闭包定义有点神奇 |
25 a1562619919 2021-12-02 16:22:11 +08:00 via Android 高中那会,我觉得我有生之年戒不了玄幻文。自从报了 it 专业,这类书完全看不下了 |
![]() | 26 MiketsuSmasher 2021-12-03 14:01:21 +08:00 @acmore 每天都要实现一抓一大把的大罗天 |
![]() | 27 cenbiq 2021-12-03 16:10:53 +08:00 楼主已进入超我境界 |
![]() | 29 AndyAO OP @xiebruce #14 你这个提问让我感到想起了此很多事情。 遇到这样的说法,基本上那个人就是个「妄人」,也就是他以为自己知道的很多,但实际上并不知道,标志就是他没有办法将他的自以为是用别人能听得懂的语言表达出来。 他当时发出来的时候会感到很爽,但是当谈细节的时候,由于不知道了,往往就避而不谈。 不过这还算好的,因为他清醒过来了,了解了自己的真实水平。 如果某个这样的人继续往下说的话,往往就是继续拔高自己,贬低愿意对话的人,继续开始他的刻薄和攻击,继续维持他那种高高在上的优越感。 越是知道的少的人,越容易嘲讽,越容易故弄玄虚。 这个在心理学上叫做「邓宁-克鲁格心理效应」,一知半解,半瓶子晃荡的人以为自己知道的最多,因为这些人「不知道自己不知道」;反之,那些真正的有知识的人,最谦虚,因为已知的东西越多就越「知道自己不知道」。  经常有个比喻,就是已知的范围就像个圆圈,你的已知范围越大,那么你与外界的接触面积也就越大,已知的东西越多,已知的位置就越多。 闻到这类味道,最好的策略就是别说话,因为根本就不值得废话…… |