JavaScript中map()方法的额外参数工作原理及相关示例疑问
理解
map()给回调传递的参数 嘿,这个问题真的问到点子上了——很多刚开始接触函数式编程的同学都会在这里卡一下,核心就是没搞清楚Array.prototype.map()到底会给它的回调函数传哪几个参数!
先拆解下你的代码逻辑:
const f = x => (a, b, c) => b + a:这是一个柯里化函数,调用f(1)后,会返回一个新的函数(a, b, c) => b + a,这个新函数就是最终传给arr.map()的回调。- 而
map()在遍历数组的时候,会给这个回调函数自动传递三个固定顺序的参数:- 第一个参数
a:当前正在遍历的数组元素 - 第二个参数
b:当前元素的索引值(从0开始计数) - 第三个参数
c:调用map()的原数组本身
- 第一个参数
现在对应你说的三种情况逐一解释:
- 当回调返回
a时:你拿到的是map()传递的第一个参数——数组的每个元素,所以输出结果就是原数组元素组成的新数组,完全符合预期。 - 当回调返回
b时:你拿到的是第二个参数——每个元素对应的索引,所以输出的会是[0, 1, 2, 3, 4, 5](你的数组有6个元素,索引从0到5)。 - 当回调返回
c时:你拿到的是第三个参数——原数组arr本身,所以map()遍历每一个元素时,都会把原数组作为结果放进新数组,最终输出的就是6个原数组组成的数组。
举个更直观的例子,把回调参数打印出来就能一目了然:
const arr = [1, 2, 3]; arr.map((elem, index, originalArr) => { console.log(`当前元素:${elem},索引:${index},原数组:${originalArr}`); });
运行这段代码,控制台会输出三次:
当前元素:1,索引:0,原数组:1,2,3
当前元素:2,索引:1,原数组:1,2,3
当前元素:3,索引:2,原数组:1,2,3
记住map()回调参数的固定顺序,以后写函数式代码就不会踩这类小坑啦~
内容的提问来源于stack exchange,提问作者user3591425
相关产品推荐
相关产品推荐

