使用 TypeScript 映射中的默认参数了解 HOF

Understanding HOF with default parameter in TypeScript map

我在 JS/TS 地图中使用 HOF。我的函数有一个默认参数。 map 似乎将数组元素转换为函数列表参数。 你能为我解释得更深入吗?

这里我做了几个简单的例子

数组中的单个元素:

function add(a: number, b: number = 1) {
    console.log(b) // 0
    return a + b
}

console.log([1].map(add)) // [1]

数组中的多个元素:

function add(a: number, b: number = 1) {
    console.log(b) // 1,2
    return a+b
}

console.log([1,2,3].map(add)) // [1, 3, 5]

JS map function 收到一个回调函数,回调函数中包含三个参数:

map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];
  • 正在处理数组中的当前元素。
  • 数组中正在处理的当前元素的索引。
  • 调用了数组映射

所以当你把它放在地图函数中时,它作为一个回调函数工作:

function add(a: number, b: number = 1) {
    console.log(b) // 0
    return a + b
}

这在有意义的命名中也意味着:

function add(currentValue: number, index: number) {
    return currentValue + index;
}

正如我之前写的,a 是 The current element is being processed in the array,b 是 The index of the current element being processed in the array

所以你上面的函数类似这样:

console.log([1].map((a, b) => a + b))
console.log([1,2,3].map((a, b) => a + b));

或者这个,参数命名更有意义:

console.log([1].map((currentValue, index) => currentValue + index))
console.log([1,2,3].map((currentValue, index) => currentValue + index));

如果你看到地图语法是

map((element, index, array) => { ... } )

元素 数组中正在处理的当前元素。

索引可选 当前正在处理的元素在数组中的索引。

数组可选 调用了数组映射。

你的功能

function add(a: number, b: number = 1) {
  console.log(b) // 0
  return a + b
}
console.log([1].map(add)) // [1]

正在接受

元素=>一个

index可选=> b

所以你所做的是将数组值与它的索引相加,你的 b 永远不会被分配给 1 因为你总是得到元素的索引。

在上面的调用中,你的

a 将为 1(实际数组第一个元素)

b 将为 0(第一个元素的索引)

你得到的结果是 1+0 = 1

数组中的多个元素同样如此