Array.prototype.map,以及这两个示例之间的区别

时间:2020-07-01 18:06:07

标签: javascript arrays

以下代码中对Array.prototype.map的调用均返回数组[2,4,6]。解释两行代码之间的细微差别。首选哪个,为什么?

[1, 2, 3].map(n => n *= 2);

[1, 2, 3].map(n => n * 2);

我试图将一种视为重新分配,另一种视为突变

3 个答案:

答案 0 :(得分:0)

在第一种情况下,您正在重新分配n,但是由于n被丢弃,这种副作用并没有真正显现出来。

答案 1 :(得分:0)

第一行可以写成如下形式。所以你只是重新分配n

console.log([1, 2, 3].map(n => n = n*2));// Like this just reassigning n with n*2 after every iteration

console.log([1, 2, 3].map(n => n * 2));

答案 2 :(得分:0)

应该没有任何区别。 两者给出相同结果的原因是.map()总是返回一个用给定函数的结果填充的新数组。需要说明的是,赋值运算符的结果就是赋值本身,实际上,如果您运行

let x = 5;
console.log(x = 4);

您得到4作为输出。

通过以下行为:

  • n => n * 2-将n * 2的结果放入相应的数组单元格中
  • n => n *= 2-将n *= 2的结果放入相应的数组单元格中,结果恰好是n * 2