V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AndyAO
V2EX  ›  程序员

无时无刻不在用“闭包”

  •  
  •   AndyAO · 2021-12-02 08:10:42 +08:00 · 5801 次点击
    这是一个创建于 1083 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    29 条回复    2021-12-05 16:24:40 +08:00
    qiaobeier
        1
    qiaobeier  
       2021-12-02 09:09:16 +08:00   ❤️ 5
    你晚上睡不着想出来的东西吗?
    marcong95
        2
    marcong95  
       2021-12-02 09:18:09 +08:00   ❤️ 13
    古人云:学而不思则罔,思而不学则殆

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

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

    真如 2 楼所说, 科班的教科书还是要好好学.
    sl0000
        18
    sl0000  
       2021-12-02 11:33:23 +08:00
    闭包=函数+外部参数
    12101111
        19
    12101111  
       2021-12-02 12:51:21 +08:00
    闭包就是使用定义函数的语法创建一个匿名的捕获对象 + 方法
    cmdOptionKana
        20
    cmdOptionKana  
       2021-12-02 12:57:53 +08:00
    啥是开包啊,开包的英文的什么?
    GuuJiang
        21
    GuuJiang  
       2021-12-02 12:59:10 +08:00 via iPhone
    找个厂子上班去吧,求你了
    maplelin
        22
    maplelin  
       2021-12-02 15:24:52 +08:00
    js 红宝书里面描述广义上的闭包就是具有封闭词法作用域的东西,所以广义上只要声明了一个函数就算创建了一个闭包。
    vanton
        23
    vanton  
       2021-12-02 15:29:51 +08:00
    你这个闭包定义有点神奇
    xingyuc
        24
    xingyuc  
       2021-12-02 15:38:56 +08:00
    @acmore 须弥芥子
    a1562619919
        25
    a1562619919  
       2021-12-02 16:22:11 +08:00 via Android
    高中那会,我觉得我有生之年戒不了玄幻文。自从报了 it 专业,这类书完全看不下了
    MiketsuSmasher
        26
    MiketsuSmasher  
       2021-12-03 14:01:21 +08:00
    @acmore 每天都要实现一抓一大把的大罗天😂
    cenbiq
        27
    cenbiq  
       2021-12-03 16:10:53 +08:00
    楼主已进入超我境界
    AndyAO
        28
    AndyAO  
    OP
       2021-12-05 16:07:33 +08:00
    @xiebruce #14
    说别人的是谬论,自己显出自己高明,最简单的方法是批评别人的看法,然后故作高深的陈默不语……
    AndyAO
        29
    AndyAO  
    OP
       2021-12-05 16:24:40 +08:00
    @xiebruce #14 你这个提问让我感到想起了此很多事情。

    遇到这样的说法,基本上那个人就是个「妄人」,也就是他以为自己知道的很多,但实际上并不知道,标志就是他没有办法将他的自以为是用别人能听得懂的语言表达出来。

    他当时发出来的时候会感到很爽,但是当谈细节的时候,由于不知道了,往往就避而不谈。

    不过这还算好的,因为他清醒过来了,了解了自己的真实水平。

    如果某个这样的人继续往下说的话,往往就是继续拔高自己,贬低愿意对话的人,继续开始他的刻薄和攻击,继续维持他那种高高在上的优越感。

    越是知道的少的人,越容易嘲讽,越容易故弄玄虚。

    这个在心理学上叫做「邓宁-克鲁格心理效应」,一知半解,半瓶子晃荡的人以为自己知道的最多,因为这些人「不知道自己不知道」;反之,那些真正的有知识的人,最谦虚,因为已知的东西越多就越「知道自己不知道」。

    ![]( https://cdn.jsdelivr.net/gh/Andy-AO/GitHubPictureBed/img/20211205161908.jpg)

    经常有个比喻,就是已知的范围就像个圆圈,你的已知范围越大,那么你与外界的接触面积也就越大,已知的东西越多,已知的位置就越多。

    闻到这类味道,最好的策略就是别说话,因为根本就不值得废话……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1138 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:00 · PVG 03:00 · LAX 11:00 · JFK 14:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.