山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで その5

Chapter 4 くり返し利用するコードを 1 箇所にまとめる - 関数 -

関数の続きです。

可変長引数

arguments オブジェクトを使って可変長引数に対応した関数を定義します。

function sum() {
  var ret = 0;
  for (var i = 0, len = arguments.length; i < len; i++) {
    var tmp = arguments[i];
    if (typeof tmp !== 'number') {
      throw new Error('引数が数値ではありません: ' + tmp);
    }
    ret += tmp;
  }
  return ret;
}

try {
  console.log(sum(1, 2, 3, 4, 5));
} catch(e) {
  console.log(e.message);
}

また、次のように書くこともできます。

function sum(...nums) {
  let ret = 0;
  for (let num of nums) {
    ret += num;
  }
  return ret;
}

console.log(sum(1, 2, 3, 4));

デフォルト引数

自分よりも前の引数をデフォルト引数にすることができます。

function mul(a, b = a) {
  return a * b;
}

console.log(mul(5, 4));
console.log(mul(5));

高階関数

forEach や map のようなメソッドのような公開関数を定義することができます。

function forOfArray(array, func) {
  for (let element of array) {
    func(element);
  }
}

function printElement(element) {
  console.log(element);
}

ary = [1, 2, 3, 4, 5];
forOfArray(ary, printElement);