もっとスマートにコーディング!JavaScript「再宣言されたパラメーター」エラーを回避する方法


例:

function myFunction(param1, param1) {
  // ...
}

このコードでは、param1という名前のパラメーターが2回宣言されています。これはJavaScriptの構文エラーであり、実行時にエラーが発生します。

このエラーを修正するには、以下のいずれかの方法で行うことができます。

  1. パラメーター名を変更する。
function myFunction(param1, param2) {
  // ...
}
  1. 重複しているパラメーター宣言を削除する。
function myFunction(param1) {
  // ...
}

このエラーが発生する原因と回避策

このエラーは、主に以下の2つの原因で発生します。

  1. 単純な打ち間違い
    変数名のスペルミスなど、単純な打ち間違いによって発生することがあります。コードを丁寧に確認することで防ぐことができます。
  2. 関数を再定義する場合のミス
    同じ名前の関数を複数回定義する場合、誤ってパラメーターを再宣言してしまうことがあります。関数を再定義する場合は、特に注意が必要です。

予防策

このエラーを防ぐためには、以下の予防策が有効です。

  • 静的解析ツールを使用して、コードの構文エラーをチェックする。
  • コードレビューを行い、誤ったパラメーター宣言がないかを確認する。
  • コードを書く際は、変数名やパラメーター名を統一して使用する。
  • コードを書く前に、関数の仕様を明確に定義しておく。


例1:単純な打ち間違いによるエラー

function myFunction(param1, param1) {
  // ...
}
function myFunction(param1, param2) {
  // ...
}

例2:関数を再定義する場合のエラー

function myFunction(param1) {
  // ...
}

function myFunction(param1, param2) {
  // ...
}

このコードでは、同じ名前の関数(myFunction)が2回定義されています。2番目の関数定義において、param1というパラメーターが再宣言されているため、エラーが発生します。修正方法は以下の通りです。

function myFunction(param1) {
  // ...
}

function myFunction2(param1, param2) {
  // ...
}

以下のコードは、param1という名前のパラメーターが2回宣言されているため、エラーが発生します。

function myFunction(param1, param1) {
  // ...
}
[eslint] Duplicate function parameter name "param1". (no-duplicate-args)


パラメーター名を変更する

最もシンプルで分かりやすい方法は、重複しているパラメーターの名前を変更することです。例えば、以下のコードのように変更します。

function myFunction(param1, param2) {
  // ...
}

デフォルト値を使用する

関数の引数にデフォルト値を設定することで、省略記法を使用できるようになります。例えば、以下のコードのように変更します。

function myFunction(param1 = defaultValue1, param2 = defaultValue2) {
  // ...
}

この場合、myFunction() を引数なしで呼び出すと、デフォルト値 (defaultValue1defaultValue2) が使用されます。

オプション引数を使用する

ES2015以降では、オプション引数を使用して、引数の省略やデフォルト値の設定をより柔軟に行うことができます。例えば、以下のコードのように変更します。

function myFunction(param1, param2 = defaultValue2) {
  // ...
}

この場合、myFunction() を引数なしで呼び出すと、param1undefined になり、param2defaultValue2 が使用されます。

  • より柔軟な引数の処理が必要な場合は、オプション引数を使用すると良いでしょう。
  • 頻繁に省略される引数がある場合は、デフォルト値を使用すると便利です。
  • パラメーターの名前が分かりやすい場合は、パラメーター名を変更するのがシンプルです。