function foo(x) { return x; } foo(1); // returns 1 as expected function bar(x) { return x; }(1,2,3); // returns 3 No pude entender por qué la función de bar devuelve el último argumento. ¿Puede alguien explicármelo?
Su función bar() se interpreta como una declaración de función y no como una expresión de función , como resultado, (1, 2, 3) no es la sintaxis de llamada para funciones () , sino el operador de agrupación que usa la coma- operator , que devuelve el último valor de 3 (que luego se registra en la consola). Si está en líneas separadas, puede quedar más claro:
function bar(x) { // declares a function bar console.log("running"); // never logged return x; } // Uses the grouping operator `( )`, with the comma operator (1,2,3); // returns 3 Si hace que bar() sea una expresión de función, entonces se comportará como se esperaba (aquí estoy usando unario más + para lograrlo):
+function bar(x) { console.log("running"); // logged return x; }(1,2,3); // returns 1