Skip to content

引子

我们在使用一个函数时,其实就是想将一些功能、逻辑等封装起来以便使用。当再次计算时直接调用函数即可。我们来看一个例子

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原则的体现

函数是一等公民

共 20 个模块,1301 篇 Markdown 文档。