Avatar ·

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