¿Cuál es la diferencia entre call y apply en JavaScript? ¿Cuándo usar cada uno?
¡Hola a todos! Empecé a estudiar JavaScript y me topé con los métodos call y apply. Entiendo que ambos permiten llamar a una función con un contexto especificado (el valor de this), pero no logro captar cuál es la diferencia fundamental entre ellos.
Supongamos que tengo un objeto simple y una función:
```javascript
const person = {
firstName: 'Iván',
lastName: 'Petrov'
};
function greet(greeting, punctuation) {
console.log(`${greeting}, ${this.firstName} ${this.lastName}${punctuation}`);
}
```
Puedo llamar a esta función con call:
```javascript
greet.call(person, 'Hola', '!'); // Hola, Iván Petrov!
```
Y con apply:
```javascript
greet.apply(person, ['Hola', '!']); // Hola, Iván Petrov!
```
El resultado es el mismo. Leí que la diferencia está en cómo se pasan los argumentos: call — separados por comas, apply — como un array. ¿Pero esto es solo azúcar sintáctico? ¿O hay escenarios prácticos donde apply es insustituible? Por ejemplo, escuché sobre "faking" de métodos de arrays o trabajar