在不提供输入的情况下调用迭代器函数会产生奇怪的行为?

时间:2018-05-19 17:28:19

标签: javascript

function commonFunction(x, y) {
  return x * y * 2;
}

var ints = [1,2,3];
var result = ints.map(commonFunction);
//result = [0,4,12]

纠正我,如果我错了,commonFunction期待2个参数,并且通过在commonFunction内调用Array.map,第一个参数会自动填充数组的每个人。

如上所示,未提供第二个参数,为什么会产生[0,4,12]的结果?

我了解为了获得正确的结果,我可以使用bind,如下所示:

var result = ints.map(commonFunction.bind(this,3));
//result = [6,12,18]

2 个答案:

答案 0 :(得分:1)

Map使用3个参数调用commonFunction,第二个是索引。

var new_array = arr.map(function callback(currentValue[, index[, array]]) {
    // Return element for new_array
}[, thisArg])

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

这就是你得到[1*0*2, 2*1*2, 3*2*2]

的原因

关于绑定:

commonFunction.bind(this,3)之后你得到一个总是得到x = 3的函数,但这真的很奇怪,你应该只做以下几点:

map(value => commonFunction(3, value))

答案 1 :(得分:1)

.map()回调的第二个参数是数组索引,因此您可以将其作为您的' y'每次都有价值。 (只是为了完整性,虽然它与问题没有直接关系,但第三个参数是完整数组:)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map



function commonFunction(x, y, z) {
  console.log("X: ",x); // the array value
  console.log("Y: ",y); // the array index
  console.log("Z: ",z); // the full array
  return x * y * 2;
}

var ints = [1,2,3];
var result = ints.map(commonFunction);