SyntaxError: Malformed formal parameter

JavaScript の例外 "malformed formal parameter" は、 Function() 呼び出しの引数リストが何らか無効である場合に発生します。

エラーメッセージ

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

エラーの種類

SyntaxError

エラーの原因

Function() を使用して、 2 つ以上の引数を渡すとします。最後の引数は、作成する新しい関数のソースコードです。 残りの引数は、新しく生成する関数の引数リストを構成します。

引数リストの何かが無効です。引数名として ifvar のようなキーワードを選んでしまったかもしれませんし、引数リストに誤った区切りがあるかもしれません。または、数値やオブジェクトのような無効な値を渡しているかもしれません。

解決したが、なぜ最初からそう言ってくれないのか

確かに、エラーメッセージの文言は少々奇妙です。 "Formal parameter" は、 "関数の引数" を表現するにはファンシーな言い方です。 さらに、"malformed" という言葉を使っていますが、それは Firefox エンジニアが 19 世紀のゴッシックホラー小説の大ファンだからです。

無効な場合

var f = Function('x y', 'return x + y;');
// SyntaxError (missing a comma)

var f = Function('x,', 'return x;');
// SyntaxError (extraneous comma)

var f = Function(37, "alert('OK')");
// SyntaxError (numbers can't be argument names)

妥当な場合

var f = Function('x, y', 'return x + y;');  // correctly punctuated

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

// if you can, avoid using Function - this is much faster
var f = function(x) { return x; };

関連情報