Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

282
Vistas
¿Hay alguna diferencia significativa entre bind () y función de flecha + llamada ()?

Dado el código ES6 como

 let a = new SomeClass(); let b = new AnotherClass(); let x = a.someMethod.bind(b, 1, 2, 3); let y = () => a.someMethod.call(b, 1, 2, 3);

¿Hay alguna diferencia significativa entre x e y ? Sé que bind() es una función mucho más antigua, pero ¿hay alguna necesidad de usarla sobre las funciones de flecha hoy en día?

Al menos para mí, la sintaxis de la función de flecha es mucho más fácil de leer que la sintaxis de bind() , especialmente porque a menudo puedes evitar usar call() en la práctica cuando this tiene el significado normal del contexto léxico. Por ejemplo, ¿ bind() tendrá un mejor rendimiento (CPU o RAM) en la práctica?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Independientemente del rendimiento, para algunos casos de uso, la función de flecha no puede representar la misma lógica. Por ejemplo, cuando usa Promesas, puede tener algo como esto ( fuente de este ejemplo ):

 function CommentController(articles) { this.comments = []; articles.getList() .then(function (articles) { return Promise.all(articles.map(function (article) { return article.comments.getList(); })); }) .then(function (commentLists) { return commentLists.reduce(function (a, b) { return a.concat(b); }); }) .then(function (comments) { this.comments = comments; }.bind(this)); }

Tenga en cuenta la diferencia si se eliminó el último bind(this) . No hay una manera simple de usar la notación de función de flecha para cambiar esto sin modificar mucho el código. Sin embargo, personalmente prefiero usar el cierre con un nombre de variable que no sea this para un código como este.

Además, bind() se puede usar para aplicaciones parciales que pueden ser más fáciles de leer para personas con experiencia en programación funcional .

Por otro lado, si a.someMethod se modifica más tarde, la versión que usó bind() no verá el cambio porque tomó la referencia a la función durante el enlace. La variante con la función lambda verá el valor actual de a.someMethod cuando se llame a y() .

Ejemplo adicional sobre la necesidad de .bind(this) :

 let f = { x: "bind data", test: function() { console.log("1. this=", this); setTimeout(function() { console.log("2. this=", this); }, 0); setTimeout(function() { console.log("3. this=", this); }.bind(this), 0); } } f.test();

about 4 years ago · Juan Pablo Isaza Denunciar

0

 let a = function(){}; let b = function(){}; am = 1 bm = 2 a.someMethod = function(x, y, z){ return this.m + x + y + z } let x = a.someMethod.bind(b, 1, 2, 3); let y = () => a.someMethod.call(b, 1, 2, 3) console.log( x(1,2,3) ) console.log( y(1,2,3) ) function goBind() { for (var i = 0; i < 1000000; i++) { x(1,2,3) } } function goArrow() { for (var i = 0; i < 1000000; i++) { y(1,2,3) } } function race() { var start = performance.now(); goBind(); console.log('bind: ' + (performance.now() - start)); start = performance.now(); goArrow() console.log('arrow: ' + (performance.now() - start)); start = performance.now(); goBind(); console.log('bind: ' + (performance.now() - start)); start = performance.now(); goArrow() console.log('arrow: ' + (performance.now() - start)); console.log('------'); }
 <button onclick="race()">RACE!</button>

Basado en esto: ¿Son las funciones de flecha más rápidas (más eficientes, más livianas) que la declaración de función independiente ordinaria en v8?

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda