闭包和对象的区别?

2021-01-08 17:48:15 +08:00
 asanelder
在看 js 的闭包, 感觉和面向对象中的对象差不多啊

闭包: 行为以及数据的绑定
对象: 行为以及数据的绑定

感觉没差啊, 是不是可以使用对象来代替闭包?
5874 次点击
所在节点    程序员
46 条回复
gaolingyi
2021-01-11 13:10:16 +08:00
闭包是早期没有模块化发明的私有变量的方法,现在 js 也有 class 了
julyclyde
2021-01-11 17:58:47 +08:00
主要是逼格的问题
闭包更加 bigger
对象一看就是陈旧的概念了
walpurgis
2021-01-11 22:16:02 +08:00
@yaphets666 闭包无处不在,可能你已经用了很多次而自己都没察觉,比如给 DOM 元素添加事件就是一个典型闭包应用场景

{
let a = 0
document.body.addEventListener('click', () => {
a = a + 1
console.log(a)
})
}

其实这已经是闭包了,不是在函数里返回函数才叫闭包,是因为 JS 以前只有函数作用域,原谅我上面的回帖考虑不周
出了这个块级作用域,再也不可能拿到变量 a,理应被销毁,但事件回调函数内引用了 a,需要维持环境,所以 a 不会被销毁,点击 body 可以看到 a 在不断+1
非常简单的就创建了一个安全的私有变量,这不比 class 写法爽多了?
asanelder
2021-01-11 22:30:54 +08:00
@walpurgis #41 感谢老铁解惑, 闭包确实是一种轻量级的解决方案. 写 class 总要有那么现实世界有对应之物. 显的很重
yaphets666
2021-01-12 09:11:08 +08:00
@walpurgis 明白你说的了
learningman
2021-01-16 21:42:13 +08:00
@codehz 原来这个*p 是干这个的
写了一万个 NULL

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

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

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

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

© 2021 V2EX