为什么 aryB.forEach(aryA.push.bind(aryA)) 在 JavaScript 中不起作用?

Why doesn't aryB.forEach(aryA.push.bind(aryA)) work in JavaScript?

例如:

> var aryA = [];
undefined
> var aryB = [1, 2, 3];
undefined    
> aryB.forEach(aryA.push.bind(aryA));
undefined
> aryA
[1, 0, Array[3], 2, 1, Array[3], 3, 2, Array[3]]

是的,我想将元素从 aryB 复制到 aryA。我当然有其他的解决办法,但是为什么这个方法不行呢?
如果这是一个重复的问题,请原谅。我是 Whosebug 的新手。

嗯,确实如此 "work"。 .forEach 将三个参数传递给回调:

  1. 当前数组元素
  2. 当前数组元素的索引
  3. 数组本身(即 .forEach 被调用)

由于您将 push 作为回调传递,因此您实质上是在每次迭代中执行以下调用:

aryA.push(aryB[i], i, aryB);

即向数组添加三个值,这正是您所看到的结果:

[1, 0, Array[3], 2, 1, Array[3], 3, 2, Array[3]]
 ^  ^  ^         ^  ^  ^
 |  | array      |  |  array
 | 1. index      | 2. index      ...
1. element      2. element

我猜你只想压入第一个参数,在这种情况下你必须传递一个函数调用 .push 只有第一个参数。