【问题标题】:Can't use forEach and map to pass an argument to the array of functions不能使用 forEach 和 map 将参数传递给函数数组
【发布时间】:2017-11-19 22:22:36
【问题描述】:

我有一个函数数组。然后我使用 forEach 循环将参数传递给这些函数。虽然当我尝试调用第一个函数时,我在控制台中得到未定义而不是“嘿”

然后我尝试从旧数组创建一个新数组。并尝试使用 map 来获取函数数组,并将参数传递给每个函数,但我得到了一个包含三个未定义项的数组,所以我什至不能调用函数。

const arr = [(arg) => {console.log(arg)}, (arg) => {}, (arg) => {} ];
    arr.forEach(func => func('hey'));
    arr[0]();

    const arr2 = arr.map(func => func('ho'));
    console.log(arr2);
    arr2[0]();

这两种情况是怎么回事?

【问题讨论】:

  • 您正在调用函数,但它们不返回任何内容

标签: javascript arrays foreach


【解决方案1】:

第一种情况没有问题,尽管arr[0](); 只会打印undefined,因为您没有传递任何参数。

第二种情况,结果数组包含每个函数的调用结果,每个函数都返回undefined,所以arr2中没有函数可以调用。

您的代码 sn-p 在 HTML 部分中有 JS,因此它根本没有运行。

const arr = [(arg) => { console.log(arg) }, (arg) => {}, (arg) => {}];
arr.forEach(func => func('hey'));
arr[0](); // <-- You're passing no argument here

// This invokes the functions, and builds an array of the functions'
// return values, all of which are `undefined`.
const arr2 = arr.map(func => func('ho'));
console.log(arr2);
arr2[0]();

【讨论】:

  • 我以为我在 forEach 循环的每个数组项中传递了参数,所以我可以使用这个参数调用这些函数中的任何一个。更正了 sn-p,谢谢。
  • 您确实将'hey' 参数传递给forEach 回调中的每个函数,但只有第一个函数实际使用它。最后两个没有使用arg
  • 感谢您的回答。然而,一个新的问题出现了:为什么像这样 [].forEach(func => func('hey')); 在空数组上调用 forEach 不会导致错误,如果我们没有函数是调用?
  • 顺便说一句,如果您认为调用它们一次会将参数永久绑定到函数,它不会。每次调用函数时都需要提供参数。
  • 使用[].forEach(...,数组中没有项目,所以它迭代零次,所以你传递的回调永远不会被调用。所以没有机会发生错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多