Qual é a diferença entre call e apply em JavaScript? Quando usar cada um?
Olá a todos! Comecei a estudar JavaScript e me deparei com os métodos call e apply. Entendo que ambos permitem chamar uma função com um contexto especificado (valor de this), mas não consigo captar qual é a diferença fundamental entre eles.
Digamos que eu tenha um objeto simples e uma função:
```javascript
const person = {
firstName: 'Ivan',
lastName: 'Petrov'
};
function greet(greeting, punctuation) {
console.log(`${greeting}, ${this.firstName} ${this.lastName}${punctuation}`);
}
```
Posso chamar essa função com call:
```javascript
greet.call(person, 'Olá', '!'); // Olá, Ivan Petrov!
```
E com apply:
```javascript
greet.apply(person, ['Olá', '!']); // Olá, Ivan Petrov!
```
O resultado é o mesmo. Li que a diferença está em como os argumentos são passados: call — separados por vírgula, apply — como array. Mas isso é apenas açúcar sintático? Ou existem cenários práticos onde apply é insubstituível? Por exemplo, ouvi falar sobre "faking" de métodos de arrays ou trabalho