一、函数的副作用?
函数内部操作改变了全局的数据对象,这就是函数的副作用
二、为什么选择无副作用的函数?
有副作用的函数会带来什么样的问题
实例代码:
通过以上代码可以看到通过get方法对全局的user对象进行处理,并且改变了user对象的值,进而导致我主函数的if没有执行,这就是函数的副作用导致的,排查问题非常的时候很困
改善
if执行,原user的值未改变
注意: 如果直接通过user1 = user来赋值的话结果还是改变全局对象,原因是,对象之间的赋值传递的不是值而是地址,而这些引用是存在栈中,值存堆中,通过=来赋值就是把user对象所对应的堆地址给了user1,值还是同一个。一个堆地址,可以有多个栈引用。
- 查找问题困难
- 可读性差(多个函数操作全局对象,结果难料)
什么东西是两面性有好有坏,有副作用的好处呢,效率高,减少局部变量的代码。设计这些函数的时候,要根据实际情况来设计,保证程序的正确性。