Open1

argumentsのうまい使い方

So-sanSo-san

問題

2 つの引数を合計する関数を作成してください。 1 つの引数のみが与えられた場合は、関数を返してください。その関数は 1 つの引数を取り、合計を返します。

たとえば、addTogether(2, 3) は 5を返し、addTogether(2) は関数を返す必要があります。

この返された関数に 1 つの引数を与えて呼び出すと、合計を返します。

var sumTwoAnd = addTogether(2);

sumTwoAnd(3) は 5 を返します。

いずれかの引数が有効な数値でない場合は、undefined を返してください。

解答

function addTogether() {
  const [first, second] = arguments;
  // argumentsには引数がオブジェクトとして格納されている
  if (typeof(first) !== "number")
    return undefined;
  if (arguments.length === 1)
    return (second) => addTogether(first, second); // 関数のカリー化
  if (typeof(second) !== "number")
    return undefined;
  return first + second;
}

addTogether(2,3);

参考

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/arguments

https://www.freecodecamp.org/japanese/learn/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/arguments-optional