副作用,是相对于主要作用的,并不只是“坏”作用
因为“药物的副作用”,一直以来都没有很好的理解编程中 “副作用” 一词,想当然的把它理解为了 一些“负面”的作用。
对于 “副作用
” 科书版的解答就是:
- “副作用”(side effect),指的是函数内部与外部互动,产生运算以外的其他结果。
但是很笼统,对于已经有刻板影响的中文世界,还是很容易曲解的。
正巧今天在水群的时候提到了这个词,发现其实还有很多人和我有一样的问题,并没有很好的理解。
特别是在 React 文档 中也提到了 副作用
,虽然我现在看来其实很好理解,但是当时确实给我造成了一些困扰。
那我就用上边的这篇文档中提到的副作用来举例吧。
import React, { useState, useEffect } from 'react';
function Example() {
const [count, setCount] = useState(0);
// Similar to componentDidMount and componentDidUpdate:
useEffect(() => {
// Update the document title using the browser API
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
这个示例主要功能是实现一个按钮点击累计 count
,并且展示 count
的需求,
然后使用 useEffect()
在DOM更新后修改页面标题,这个修改页面标题就是这个函数的副作用。
另外一个例子就是群里边提到的 tree-shaking
中的副作用,表示的是项目不影响全局,不会增加减少全局的变量,也不会改变某个原型。
工具可以可以放心地优化掉代码,不需要考虑因为外部代码可能使用到了,该项目附加的属性方法而没办法进行优化。
总而言之,想表达意思其实是除了函数执行的主要目的(primary effect
)之外,额外产生的一些附加的影响(side effect
),这些附加的影响可能是无法预期的,会给程序带来不必要的麻烦,也可能是特意为止的,为了实现一些额外的操作。
所以并不是简单的字面理解为 “坏作用”,这个副作用可能会是正面的。