未传入全部参数时调用Array.map迭代函数为何出现异常结果?
关于Array.map调用多参数函数的参数传递问题
嘿,这个问题问得特别好,我来帮你把这个逻辑掰扯清楚~
首先先给你确认:你的第一个理解是对的!Array.map在调用回调函数时,会自动给回调传入三个参数,顺序是:
- 当前遍历到的数组元素
- 当前元素的索引值
- 原数组本身
而你的commonFunction接收两个参数x和y,所以当map调用它的时候:
x会被自动填充为数组的每个元素y会被自动填充为当前元素的索引(第三个参数原数组被函数忽略了,因为函数只用到前两个参数)
那我们来对应着算一遍你给出的示例结果:
- 第一个元素
1,索引是0:1 * 0 * 2 = 0 - 第二个元素
2,索引是1:2 * 1 * 2 = 4 - 第三个元素
3,索引是2:3 * 2 * 2 = 12
这就是为什么最终结果是[0,4,12]啦!
再来说你用bind的例子:commonFunction.bind(this,3)的作用是把commonFunction的第一个参数x固定为3,返回一个新的函数。当map调用这个新函数时,会把数组元素作为第二个参数传给它(也就是y),所以计算逻辑变成了3 * 数组元素 * 2:
3*1*2=6,3*2*2=12,3*3*2=18,正好对应你得到的[6,12,18]。
另外补充一个小技巧:如果你觉得bind有点绕,也可以用匿名函数包裹来实现同样的效果,可读性可能更强:
var result = ints.map(item => commonFunction(item, 3));
内容的提问来源于stack exchange,提问作者Isaac
相关产品推荐
相关产品推荐

