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

闭包和对象是一回事

  •  2
     
  •   AndyAO · 2021-12-12 18:15:37 +08:00 · 1976 次点击
    这是一个创建于 837 天前的主题,其中的信息可能已经有所发展或是发生改变。

    闭包和对象是一回事,都是封装数据,只不过闭包语法,主要应用于「头等函数」语言中,用来解决函数声明和执行时外部作用域出现变化产生的问题。

    8 条回复    2021-12-15 12:29:16 +08:00
    limao
        1
    limao  
       2021-12-12 20:39:34 +08:00
    liberty1900
        2
    liberty1900  
       2021-12-13 00:49:35 +08:00 via Android
    闭包封装并绑定了 this, 我觉得有点像 OOP 里的单例模式
    AndyAO
        3
    AndyAO  
    OP
       2021-12-13 06:52:46 +08:00
    @liberty1900 #2 不是单例,闭包生成函数可以被重复调用。

    当然,你也可以匿名它,生成器函数,用完就丢掉,这样倒是单例了。

    实质上这两个功能就是等价的,因为已经被证明可以相互模拟。

    只不过通常语法上不同,在不同的情景下使用起来方便性有区别。
    iamzuoxinyu
        4
    iamzuoxinyu  
       2021-12-13 10:20:10 +08:00
    写一个 lisp 解释器就能完全理解闭包这玩意了。
    kidblg
        5
    kidblg  
       2021-12-13 13:25:48 +08:00   ❤️ 1
    对象:带方法的数据
    闭包:带数据的方法

    v2ex 之前有过讨论: https://v2ex.com/t/743103
    retamia
        6
    retamia  
       2021-12-13 15:27:59 +08:00
    SICP 第三章的模块化,里面提到的一个编程语言的抽象概念——环境模型。看了这个就理解了。
    aguesuka
        7
    aguesuka  
       2021-12-13 16:11:06 +08:00
    我是这么认为的
    闭包等价于对象 (Closures are equivalent to Objects) ("闭包 ~ 对象" 为真)
    闭包和对象不是一回事 (Closures and Objects are not the same thing) ("闭包 ≡ 对象" 为假)
    julyclyde
        8
    julyclyde  
       2021-12-15 12:29:16 +08:00
    闭包是“不洁”的函数
    它的输入居然不是明确全部列出来的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1409 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:45 · PVG 07:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.