闭包和对象是一回事

2021-12-12 18:15:37 +08:00
 AndyAO

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

2154 次点击
所在节点    程序员
8 条回复
limao
2021-12-12 20:39:34 +08:00
liberty1900
2021-12-13 00:49:35 +08:00
闭包封装并绑定了 this, 我觉得有点像 OOP 里的单例模式
AndyAO
2021-12-13 06:52:46 +08:00
@liberty1900 #2 不是单例,闭包生成函数可以被重复调用。

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

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

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

v2ex 之前有过讨论: https://v2ex.com/t/743103
retamia
2021-12-13 15:27:59 +08:00
SICP 第三章的模块化,里面提到的一个编程语言的抽象概念——环境模型。看了这个就理解了。
aguesuka
2021-12-13 16:11:06 +08:00
我是这么认为的
闭包等价于对象 (Closures are equivalent to Objects) ("闭包 ~ 对象" 为真)
闭包和对象不是一回事 (Closures and Objects are not the same thing) ("闭包 ≡ 对象" 为假)
julyclyde
2021-12-15 12:29:16 +08:00
闭包是“不洁”的函数
它的输入居然不是明确全部列出来的

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

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

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

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

© 2021 V2EX