我发现了一些代码,它似乎在工作,但我不明白它的一个方面。
> [].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
为什么我们在这里需要第二组这些方括号,它们是什么意思?我从未见过将其放在那里的功能。谢谢。
Function.prototype.apply
需要 2 个参数。
this
论点。- 要传递给函数的参数数组。
因此,该函数被放入数组中,因为apply
函数需要一个参数数组。基本上,您的代码正在传递 1 个参数,这是一个函数。
但是,您可以将.apply
替换为 .call
,然后不需要参数数组,您只需向.call
函数添加多个参数即可。
[].forEach.call('javascript', function(char) {
console.log(`give me… ${char.toUpperCase()}`);
});
当您有一个现有的参数数组或您不知道要传递多少参数时,.apply
最有用,这是 ES6 之前的技巧语法。