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

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

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