Javascript 这两种方法中哪一种更安全(变异或重新分配)?

Javascript 这两种方法中哪一种更安全(变异或重新分配)?,javascript,functional-programming,Javascript,Functional Programming,从函数式编程的角度来看,我必须保持状态。这两种方法中哪一种被认为更安全?或者它们是一样的。另外,如果在FP中一个比另一个更受欢迎,我猜是变量重新分配 一, 二, 第一种方法是创建新对象,然后重新分配变量。第二种方法是改变对象属性 我确实意识到spread不能进行深度复制,但这不是问题的重点。鉴于函数式编程的“正常”范式是保持对象不变,我选择选项1: 您希望以这样的方式构造代码:函数将对象作为输入,并返回新对象,而不更改传入的原始对象 让您的函数和对象保持不变,您就拥有了一个功能型程序 编辑:看看

从函数式编程的角度来看,我必须保持状态。这两种方法中哪一种被认为更安全?或者它们是一样的。另外,如果在FP中一个比另一个更受欢迎,我猜是变量重新分配

一,

二,

第一种方法是创建新对象,然后重新分配变量。第二种方法是改变对象属性

我确实意识到spread不能进行深度复制,但这不是问题的重点。

鉴于函数式编程的“正常”范式是保持对象不变,我选择选项1:

您希望以这样的方式构造代码:函数将对象作为输入,并返回新对象,而不更改传入的原始对象

让您的函数和对象保持不变,您就拥有了一个功能型程序


编辑:看看这篇文章,准备好一些阅读想法

#1更接近函数式编程,2不应该是
主题['topic']
两个版本都没有功能。但是,如果在函数作用域内重新分配,则不会干扰父作用域,也就是说,从函数的角度来看,前者稍好一些。IMHO,如果要使用express,则必须放弃FP。express框架迫使您编写非功能性代码,而试图使其功能化只会使您的工作更加困难。异步代码可以使用或在FP中建模。然而,express没有一个一元接口。您可以尝试将express框架封装在一元接口中。然而,这是太多的工作太少的收益。相反,我建议您接受express提倡的编程风格。并不是所有的东西都必须是功能性的。事实上!但是在代码状态的某个地方(在我的例子中)必须保留,并且这个函数将保存所呈现的代码(很抱歉,糟糕的不纯函数,没有函数值得这样做!)。我希望你明白我的意思?我在一篇相关的SO帖子上添加了一个链接。它讨论函数式程序中的状态。阅读它需要一点时间,深入研究它需要一点时间,但这是一个抓紧的好地方
topics = {
    ...topics,
    topic: { subscribers: [], registerCallback: callback }
};
topics[topic] = { subscribers: [], registerCallback: callback }
topics = {
    ...topics,
    topic: { subscribers: [], registerCallback: callback }
};