SyntaxError: Malformed formal parameter

Mensaje

SyntaxError: Expected {x} (Edge)
SyntaxError: malformed formal parameter (Firefox)

Tipo de error

¿Qué salió mal?

Hay un constructor Function() con al menos dos argumentos pasados en el código. El último argumento es el código fuente de la nueva función que está creando. Todo lo demás forma la lista de argumentos de su nueva función.

La lista de argumentos no es válida de alguna manera. Quizás eligió accidentalmente una palabra clave como if o var como nombre de argumento, o tal vez haya algún signo de puntuación en su lista de argumentos. O tal vez accidentalmente pasó un valor no válido, como un número u objeto.

OK, eso solucionó mi problema. Pero, ¿Por qué no dijiste eso en primer lugar?

Es cierto que la redacción del mensaje de error es un poco extraña. El "parámetro formal" es una forma elegante de decir "argumento de función". Y usamos la palabra "malformada" porque todos los ingenieros de Firefox son grandes admiradores de las novelas de terror góticas del siglo XIX.

Ejemplos

Casos no validos

js
var f = Function('x y', 'return x + y;');
// SyntaxError (Falta una coma)

var f = Function('x,', 'return x;');
// SyntaxError (Coma extraña)

var f = Function(37, "alert('OK')");
// SyntaxError (Números no pueden ser nombres de argumentos)

Casos validos

js
var f = Function('x, y', 'return x + y;');  // Correctamente puntuado

var f = Function('x', 'return x;');

// Si puede, evite usar Function - Esto es mucho más rápido
var f = function(x) { return x; };

Ver tambien