Yo estaba en una entrevista, y había esta pregunta:
Cuando el método X de un objeto O se pasa a una función Y como parámetro, ¿qué sucede si X contiene una referencia a 'esto' y se ejecuta dentro de Y? Proporcione ejemplos de código.
¿Es este código una interpretación correcta de la pregunta?
let O = { name: 'John', age: 30, X() { console.log(this.name); }, }; let generic = OX(); function Y(param) { return param; } console.log(Y(generic));¿Podría ayudarme a comprender y responder a la pregunta, aunque solo sea con un ejemplo?
La pregunta pregunta si se pasa la función , no si la función se invoca inmediatamente y luego se pasa. Probablemente estaban pensando en algo como esto:
let O = { name: 'John', age: 30, X() { console.log(this.name); }, }; function callbackInvoker(fn) { fn(); } callbackInvoker(OX); Como puede ver, a menos que el método pasado se vincule primero, o sea una función de flecha, se habrá perdido this vínculo con el objeto O , que es probablemente sobre lo que la pregunta pretendía probarlo.
let O = { name: 'John', age: 30, X() { console.log(this.name); }, }; let generic = OX; function Y(fn) { return fn(); // <-- execute here } console.log(Y(generic));