我found某段代码,似乎有效,但我不了解其中的一个方面。
> [].forEach.apply('javascript', [function(char) {
... console.log(`give me… ${char.toUpperCase()}`);
... }]);
give me a… J
give me a… A
give me a… V
give me a… A
give me a… S
give me a… C
give me a… R
give me a… I
give me a… P
give me a… T
为什么我们在这里需要第二组这些方括号,它们是什么意思?我从来没有见过把它放在那里的功能。感谢。
答案 0 :(得分:4)
Function.prototype.apply
需要2个参数。
this
参数。因此函数被放入一个数组中,因为apply
函数需要一个参数数组。基本上,你的代码传递了1个参数,这是一个函数。
但是,您将.apply
替换为.call
,然后不需要一组参数,您只需向.call
函数添加多个参数。
[].forEach.call('javascript', function(char) {
console.log(`give me… ${char.toUpperCase()}`);
});
当你有一个现有的参数数组或者你不知道你将传递多少时, .apply
最有用,这是在ES6之前的技巧。