引子
我们在使用一个函数时,其实就是想将一些功能、逻辑等封装起来以便使用。当再次计算时直接调用函数即可。我们来看一个例子
js
var total = 0
var arr = [1, 2, 3, 4, 5]
for (let i = 0; i < arr.length; i++) {
total += arr[i]
}
console.log(total)一个求和,我们用for循环来求得和,如果需要计算另一个数组项的和,又得重来一遍了,这时用函数封装后直接调用,代码就少得多
js
function sum(arr) {
let total = 0
for (let i = 0; i < arr.length; i++) {
total += arr[i]
}
return total
}
sum([1,2,3,4])
sum([1,2,3,4,5])这里抛出一个问题。当想要去封装一个函数时,怎么做才是最好的呢?
我们平时写的大多是命令式编程(Imperative programming)这种风格编码很直观,能清楚呈现每一步逻辑,如上sum函数的作用域下维护了 arr、total、i、arr.length多个变量,虽然达到了目的,但若有类似逻辑我们需要将这些逻辑再实现一遍,在后期代码会变得冗余且难以维护;而函数式编程的思维是每当遇到这种场景时,把逻辑封装起来
for循环的控制流程很多地方都会用到,具体场景又不同,我们可以将for循环进行封装,在以后需要用到for的地方都用此封装来替代。这也是DRY原则的体现
