2

当我尝试

[1,2,3].forEach(alert);

它按预期为数组的每个项目打开消息框。

但是当我尝试

[1,2,3].forEach(console.log);

我收到以下错误

Uncaught TypeError: Illegal invocation

为什么?

4

2 回答 2

7

我个人得到Invalid calling object.

看,[1,2,3].forEach(console.log)本质上是迭代数组和运行的每个项目的简写方式console.log.call(theArray,theItem)。但是,console.log要求它this是 type 的对象Console,因此是错误的。

尝试[1,2,3].forEach(function(i) {console.log(i);})

于 2013-05-17T18:38:46.623 回答
1

实际上,它在 Firefox 中不起作用,或者至少不像您所期望的那样:

[1,2,3].forEach(console.log)

给你:

1 0 [1, 2, 3]
2 1 [1, 2, 3]
3 2 [1, 2, 3]

为什么?MDN有你的答案:

使用三个参数调用回调:

  • 元素值

  • 元素索引

  • 被遍历的数组

然而,

[1,2,3].forEach(function(i) { console.log(i); });

在 Firefox 和 Chrome 中完全按照您的预期工作。

于 2013-05-17T18:44:31.083 回答