JavaScript Bind, Apply y el puntero `this` JavaScript Bind, Apply y el puntero `this` son conceptos fundamentales en la programación de JavaScript. La función Bind se utiliza para establecer el valor del puntero `this` de una función y, opcionalmente, para fijar valores predeterminados para los argumentos de la función. Con Bind, es posible crear una nueva función que tenga un valor de `this` predefinido. Por otro lado, Apply se usa para invocar una función con un valor dado de `this` y una matriz (u objeto parecido a un arreglo) de argumentos proporcionados como un arreglo. El puntero `this` en JavaScript se refiere al contexto actual de ejecución de una función y puede variar dependiendo de cómo se invoque dicha función. A través del uso de Bind y Apply, se puede controlar y manipular el valor de `this` en JavaScript de manera precisa. Estos conceptos son esenciales para el desarrollo de aplicaciones en JavaScript, ya que permiten un control más preciso sobre el contexto de ejecución de las funciones y mejoran la reusabilidad del código. Es importante comprender y dominar el uso de Bind, Apply y el puntero `this` para aprovechar al máximo las capacidades de JavaScript en el desarrollo de aplicaciones de IT.
Me confundí un poco con JS bind
, apply
y this
.
Preguntas:
- ¿Por qué
this
ynull
son intercambiables en el siguiente fragmento de código? - ¿El
this
en el contexto siguiente apunta awindow
?
function curry(fn) {
// tu código aquí
return function curryInner(...args) {
if (args.length >= fn.length) return fn.apply(this, args);
return curryInner.bind(this, ...args); //cambia esto a null, aún así pasa la prueba
};
}
const join = (a, b, c) => {
return `${a}_${b}_${c}`
}
const curriedJoin = curry(join)
console.log(curriedJoin(1, 2, 3)) // '1_2_3'
davy.ai
Respuestas
this
ynull
son intercambiables en el métodobind
utilizado encurryInner.bind(this, ...args)
porque el contexto dethis
no se utiliza dentro de la funciónjoin
. El primer argumento pasado al métodobind
establece el contexto dethis
dentro de la función cuando se invoca eventualmente. Dado quejoin
no utilizathis
, el contexto no afecta el comportamiento de la función. Por lo tanto, pasarnull
en lugar dethis
tampoco afecta el comportamiento de la función.this
en el contexto dado no apunta al objetowindow
. Puede apuntar al objeto_global_
o al objeto que llamó a la función que utiliza la funcióncurry
. Dado quecurry
es una función de orden superior que devuelve una nueva función, el contexto dethis
puede depender de cómo se llama a la función devuelta.