El conocimiento es el nuevo dinero.
Aprender es la nueva manera en la que inviertes
Acceso Cursos

Sólo el 1% de los desarrolladores son capaces de encontrar el fallo en este código en menos de 60 segundos

Me llevó bastante tiempo encontrar el error oculto en este código JavaScript:

· 1 min de lectura
Sólo el 1% de los desarrolladores son capaces de encontrar el fallo en este código en menos de 60 segundos
function getResult(a, b) {
    return 
    {
        result: a + b
    };
}

console.log(getResult(2, 3)); // What will this output? 5 right?

A primera vista, el código parece ser una función simple que suma dos valores pasados como argumentos. Sin embargo, la salida puede ser sorprendente...

¿Puedes arreglarlo?

Explicación del error

Es de esperar que la función devuelva el objeto { result: 5 }. Sin embargo, el resultado real es indefinido. ¿Por qué? Debido a cómo funciona la inserción automática de punto y coma de JavaScript.

JavaScript interpreta que la sentencia return está completa porque hay una nueva línea después de ella.

El {} de la línea siguiente se trata como una sentencia de bloque, no como un objeto.
Esencialmente, el código se interpreta así:

return; // A semicolon is inserted here by JavaScript's ASI
{
    result: a + b;
}

La sentencia return termina antes de tiempo, por lo que la función devuelve undefined.

Solución:

Para solucionarlo, asegúrate de que el literal del objeto está en la misma línea que la sentencia return o envuélvelo entre paréntesis para hacerlo explícito:

function getResult(a, b) {
    return {
        result: a + b
    };
}

// OR

function getResult(a, b) {
    return (
        {
            result: a + b
        }
    );
}

console.log(getResult(2, 3)); // Outputs: { result: 5 }

Conclusión

Este error no es algo que te encuentres todos los días, pero puede que te saque unas cuantas canas mientras depuras tu código. Los formateadores automáticos de código a veces cometen errores como éste si te olvidas del punto y coma. Desde entonces, me he acostumbrado a escribir siempre uno.

¡Feliz codificación!

Fuente