为什么console.log非法被调用为函数参数?

时间:2013-05-17 18:35:44

标签: javascript google-chrome

当我尝试

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

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

但是当我尝试

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

我收到以下错误

Uncaught TypeError: Illegal invocation

为什么呢?

2 个答案:

答案 0 :(得分:7)

我个人得到Invalid calling object

请参阅,[1,2,3].forEach(console.log)本质上是迭代数组和运行console.log.call(theArray,theItem)的每个项目的简便方法。但是,console.log要求this成为Console类型的对象,从而导致错误。

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

答案 1 :(得分: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中的预期工作。