gpt4 book ai didi

javascript - 现代 Javascript 中的闭包 VS 类

转载 作者:行者123 更新时间:2023-12-05 09:02:17 24 4
gpt4 key购买 nike

对于主要目标是创建另一个函数的闭包,我想知道在现代 javascript 中,是否最好只在现代 javascript 中使用类。

// Closure way private counter
const countPlusOne = () => {
let count = 0;
return () =>{
count++;
console.log(count);
}
}
let demoAdd = countPlusOne();
demoAdd(); // 1
demoAdd(); // 2
demoAdd(); // 3

老实说,我从来不喜欢以这种方式使用闭包(但我认为它们非常适合中间件之类的东西),因为它们很难阅读。

那么,我是否应该像上面那样将闭包重构为类?它们的行为似乎更类似于其他语言中的典型对象。

// Class way private counter
class countPlusClass{
count = 0;
add(){
this.count++;
console.log(this.count)
}
}
const demo = new countPlusClass();
demo.add(); // 1
demo.add(); // 2
demo.add(); // 3

最佳答案

不,类(class)并不总是更好。他们只是不同。我想说的主要区别是

  • 构造函数/工厂函数返回的事物的接口(interface)。类实例具有属性和方法,通常有多个,而闭包只是一个可以调用的函数 - 具有单一功能。调用它们的语法不同,额外的方法名称有时是多余的,有时是有益的。
  • 在 OOP 中,对象应该具有身份和状态。在 FP 中,函数应该是纯函数。当然,您不需要遵循特定的范例,无状态对象和不纯函数都很好(尽管那时可能称它们为“过程”),但在争论可读性和可维护性时请记住这些约定。

所以请明智地选择。您(可能在将来)需要多种方法吗?你封装状态吗?然后使用 class 创建对象。你只需要一个函数来调用吗?然后创建一个闭包。

关于javascript - 现代 Javascript 中的闭包 VS 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71670779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com