Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

391
Views
¿Hay algo malo/peligroso en la reasignación de parámetros de función?

¿Hay algo de lo que deba preocuparme si escribo un código como el siguiente? Siempre me dijeron que reasignar parámetros de función era un gran no-no en Javascript.

 function getAddress(address, lowerCase) { address = { ...address } if (lowerCase) { address.line1 = address.line1.toLowerCase(); address.city = address.city.toLowerCase(); } return address; }

Ejemplos de consejos:

  • https://eslint.org/docs/rules/no-param-reassign
  • https://spin.atomicobject.com/2011/04/10/javascript-don-t-reasign-your-function-arguments/
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Desde mi punto de vista, si la dirección es un tipo de datos complejo como un objeto o una matriz, cambiarlo en la función significaría cambiar el objeto original, lo que podría no ser la intención o la necesidad e introducir un error.

Si el parámetro es un tipo de datos primitivo, crearía una copia en el ámbito de la función... por lo que no debería ser un problema

about 4 years ago · Juan Pablo Isaza Report

0

Según tengo entendido, la razón por la que algunos lugares recomiendan no reasignar los parámetros de la función es que hacerlo también cambiará el objeto de arguments , que no es necesariamente el comportamiento esperado. Sin embargo, para las funciones que no usan arguments , esto no debería ser un problema.

Por ejemplo, considere lo siguiente:

 function getAddress(address, lowerCase) { address = { ...address }; var originalAddress = arguments[0]; // Do stuff with address }

Para alguien que no esté familiarizado con el funcionamiento de JavaScript a este respecto, podría ser razonable suponer que configurar originalAddress de esta manera registraría el primer argumento original que se pasó a la función. Pero en realidad, cuando se reasigna la address , esto también muta el registro relevante en arguments .

Incluso cuando no usa el objeto arguments , puede ser una práctica útil considerar que todos los argumentos de una función son constantes e inmutables, para evitar la posibilidad de introducir errores, como modificar un objeto que se pasa a una función. En su ejemplo, esto podría lograrse así:

 function getAddress(addressArg, lowerCase) { const address = { ...addressArg } if (lowerCase) { address.line1 = address.line1.toLowerCase(); address.city = address.city.toLowerCase(); } return address; }

En su implementación, siempre que la address solo contenga propiedades primitivas (a diferencia de las propiedades que apuntan a un valor de referencia, como un objeto o una matriz), entonces su copia a través de { ...address } debería crear una copia completamente separada. Sin embargo, este método solo crea una copia superficial.

Si address contiene propiedades de objeto o matriz, pero no propiedades que sean clases o funciones, entonces podría crear una copia profunda a través JSON.parse(JSON.stringify(address)) en su lugar.

about 4 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 Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!