Open su37josephxia opened 2 years ago
副作用是函数执行的时候对某些值进行修改,可能导致使用到该值的函数会得到不同的执行结果。也包括给对象挂新的属性。
比如
let a = 1
function add(x) {
return x * a++
}
// 或者
let arr = [1,33,5,7,3,4,2]
function foo(arr) {
return arr.sort((a, b) => a - b)
}
function bar(arr) {
return arr.slice(0, 3)
}
// 或者
const obj = {}
function zoo(obj) {
obj.a = 1
}
function woo(obj) {
if (typeof obj.a === 'number') {
return obj.a + 1
}
return 0
}
字面意思: 除了其本身的功能外, 还有其他的作用效果
纯函数
在 JS 函数中, 有一种函数叫做纯函数, 它便是一种无副作用的函数,
在输入相同的情况下, 返回的结果也相同. 它即不受外界的环境影响结果, 也不影响外界的环境.
引用透明
除了纯函数外, 引用透明也与副作用的概念相关, 引用透明表示两个相同的表达式/函数可以在程序的任意位置互相替换而不影响结果
它的优点是相比与非引用透明的语言更易理解, 以下代码中, 若 fun 函数无副作用, 则 res1 与 res2 相等, 即替换 fun(a) 并不影响程序的结果
规范
我们一般从以下几点保证函数无副作用
1、函数入口使用参数, 但并不修改参数 2、函数内部不得改变函数外部的变量 3、运算的结果通过函数返回给外部