Digamos que tengo esta función en JavaScript:
function foo(a) { a.item = "four" return a } b = { item: "three" } b = foo(b) console.log(b) Dado que JavaScript es un lenguaje de llamada compartida, no es necesario return a , el objeto b tendría el mismo valor final con el siguiente código:
function foo(a) { a.item = "four" return a } b = { item: "three" } foo(b) console.log(b) ¿Es una mala práctica usar return b para una mejor legibilidad aunque no sea necesario?
¿Hay algún inconveniente en devolver el objeto?
Tiene razón, en su ejemplo, la declaración de devolución es innecesaria, estrictamente hablando. Además, solo como punto de aclaración, mientras JS pasa objetos por referencia, los tipos primitivos se pasan por valor.
Sin embargo, se considera una mejor práctica de JS para evitar la mutación de los parámetros de la función. Puede volverse muy confuso rápidamente cuando tiene muchas funciones que realizan acciones en el mismo objeto que se pasa y muta. Entonces, de hecho, consideraría una mala práctica escribir una función de mutación que no implique devolver un valor.
Siguiendo esa idea, su ejemplo se vería así:
function foo(a) { // Copy our input (assuming 'a' only contains primitive values) const output = { ...a }; output.item = 'four'; return output; } const b = { item: 'three' }; const c = foo(b); // b is unchangedEl método integrado Array.prototype.sort() devuelve la matriz aunque la esté ordenando en su lugar.
Si esto proporciona una mejor legibilidad es una cuestión de preferencia personal. Pero puede facilitar el trabajo con matrices/objetos que se crean sobre la marcha, por ejemplo
sorted_words = string.split(" ").sort();Si no devolviera la matriz, tendría que hacer esto en dos pasos:
sorted_words = string.split(" ") sorted_words.sort();