当我尝试
[1,2,3].forEach(alert);
它按预期为数组的每个项目打开消息框。
但是当我尝试
[1,2,3].forEach(console.log);
我收到以下错误
Uncaught TypeError: Illegal invocation
为什么?
当我尝试
[1,2,3].forEach(alert);
它按预期为数组的每个项目打开消息框。
但是当我尝试
[1,2,3].forEach(console.log);
我收到以下错误
Uncaught TypeError: Illegal invocation
为什么?
我个人得到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);})
实际上,它在 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 中完全按照您的预期工作。