JavaScript的高阶函数如何解释回调函数参数?

问题描述:

我一直在使用高阶函数并取得了一些成功,但我对回调参数的工作方式有点困惑。例如,Reduce有几个参数(累加器,currentValue等)。命名似乎并不重要。如果需要,我可以用'acc'替换累加器的使用,或者用完全不同的单词替换它。这导致我相信按照它们给出的顺序来减少解释参数。那是对的吗?JavaScript的高阶函数如何解释回调函数参数?

如果是这样,我如何表明我只需要在列表中稍后使用参数?假设我只打算使用currentIndex。即使我没有使用它们,我需要在currentIndex(accumulator和currentValue)之前输入两个参数值吗?

+1

是和是。命名无关紧要,因为它只是一个带有'reduce'内部参数的函数。没有与特定名称的关联,回调参数名称可以是任何内容,只有这些参数的位置很重要 – Li357

+1

这些名称只是帮助您知道每个参数的用途或在文档中引用它们的助记符。 – Barmar

+0

回调函数只是函数,没有什么特别的,它们是从高阶函数调用的。参数和它们的名字在任何其他功能中都起作用。 – Bergi

这使我相信他们给出的顺序 减少解释参数。那是对的吗?

是的,参数的顺序是重要的,命名无关紧要,除了这个名称可以帮助您更好地确定参数的目的。

如果是这样,我该如何表明我只需要在 的列表中使用一个参数呢?假设我只打算使用currentIndex。我需要 在currentIndex(累加器 和currentValue)之前输入两个参数值,即使我没有使用它们吗?

是的,您需要输入所有参数名称以“到达”您想要的参数。

您不一定非得使用这些参数。例如:

function hello() { 
    return "hi" 
} 

console.log([1, 2, 3, 4].reduce(hello)) // prints "hi" 

愚蠢的例子,但我想说明的是,我实际上没有使用任何reduce功能则params的,只是回我想做的事情。这仍然有效,但显然无法使用reduce函数的目的。

感谢@安德鲁 - 李,如果你不使用给定的PARAM在所有计划,该变量命名的东西,会很容易地确定它是一个未使用的变量:

function hello (dummy1, dummy2, cidx) { 
    return cidx 
} 

console.log([1, 2, 3, 4].reduce(hello)) // 4 
+1

“最佳实践” - 使用下划线来引用丢弃变量是非常不鼓励的。虽然它是古老的惯例,但它可能与Lodash/Underscore.js冲突,并不是很清楚。也许更像“虚拟”或“临时”的描述性? – Li357

+0

啊,好点,编辑答案,谢谢@AndrewLi –