メッセージ
SyntaxError: malformed formal parameter (Firefox)
エラータイプ
何がうまくいかなかったのか?
Function() を使用しいて、最低 2 つの引数を渡すとします。最後の引数は、生成する新しい関数のソースコードです。 残りの引数は、新しく生成する関数の引数リストを構成します。
引数リストの何らかが無効です。引数名として if や var のようなキーワードを選んでしまったかもしれませんし、引数リストに誤った区切りがあるかもしれません。または、数値やオブジェクトのような無効な値を渡しているかもしれません。
問題は解決した。しかし、なぜ最初にそれを伝えないのか?
確かに、エラーメッセージの文言は少々奇妙です。"Formal parameter" は、"関数の引数"を表現するにはファンシーな言い方です。 さらに、"malformed" という言葉を使っていますが、それは Firefox エンジニアが 19 世紀のゴッシックホラー小説の大ファンだからです。
例
無効なケース
var f = Function("x y", "return x + y;");
// SyntaxError (カンマが不足している)
var f = Function("x,", "return x;");
// SyntaxError (余計なカンマがある)
var f = Function(37, "alert('OK')");
// SyntaxError (数字は引数名に使用できない)
有効なケース
var f = Function("x, y", "return x + y;"); // 正しく区切られている
var f = Function("x", "return x;");
// 可能であるなら、Function の使用を控える - こちらの方が高速です
var f = function (x) { return x; };
関連項目
Function()- 関数
- Frankenstein by Mary Wollstonecraft Shelley, full e-text ("Cursed (although I curse myself) be the hands that formed you! You have made me wretched beyond expression. You have left me no power to consider whether I am just to you or not. Begone! Relieve me from the sight of your detested form.")