• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

185
Views
Pregunta de cierre de JavaScript con ejemplo de contador

Considere que tenemos fragmentos de seguimiento:

 function Counter() { let count = 0 function inc() { count += 1 } function dec() { count -= 1 } function getCount() { return count } return { getCount, inc, dec, count } } const counter = Counter() counter.inc() counter.inc() console.log(counter.getCount()) // 2 console.log(counter.count) // 0

Me pregunto por qué usar la función getCount() y devolver directamente la variable de count muestra un resultado diferente. En mi opinión, ambos hacen referencia a la misma dirección de count , y después de que inc() llame, su valor debe modificarse en consecuencia.

almost 3 years ago · Juan Pablo Isaza
3 answers
Answer question

0

return { getCount, inc, dec, count } :

  1. Crea un nuevo objeto
  2. Copia los valores actuales de esas cuatro variables en propiedades con los mismos nombres
  3. Devuelve ese objeto

Cuando cambia el valor de la variable de count , no cambia el valor de la propiedad de count .

almost 3 years ago · Juan Pablo Isaza Report

0

La razón es porque cuando hace counter.count , está obteniendo el valor de conteo del nuevo objeto que devolvió. Ese recuento es en realidad una copia del valor en el momento en que se creó y nunca se actualizará.

Si, en cambio, crea una clase y usa this.count en su lugar, siempre se actualizará.

 class Counter { constructor() { this.count = 0; } inc() { this.count += 1; } dec() { this.count -= 1; } getCount() { return this.count; } } const counter = new Counter(); counter.inc() counter.inc() console.log(counter.getCount()) // 2 console.log(counter.count) // 2

O, si quieres hacerlo de la manera más antigua:

 function Counter() { this.count = 0 function inc() { count += 1 } function dec() { count -= 1 } function getCount() { return count } this.inc = inc; this.dec = dec; this.getCount = getCount; return this; } const counter = Counter() counter.inc() counter.inc() console.log(counter.getCount()) // 2 console.log(counter.count) // 2

O bien, podría count y objetar con algún valor que se actualizaría:

 function Counter() { let count = { value: 0 } function inc() { count.value += 1 } function dec() { count.value -= 1 } function getCount() { return count.value } return { getCount, inc, dec, count } } const counter = Counter() counter.inc() counter.inc() console.log(counter.getCount()) // 2 console.log(counter.count.value) // 2

Aunque ese último es un poco tonto para este caso de uso en particular.

almost 3 years ago · Juan Pablo Isaza Report

0

Principalmente porque el count que está devolviendo de la función es una copia de la variable ( valor para ser más preciso) y getCount es una función, que se refiere a la referencia de una variable de count . Más puedes aprender aquí .

almost 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error