JavaScriptのユーザ定義関数

ユーザ定義関数を定義する方法

・function命令で定義する ※推奨
・Functionコンストラクタ経由で定義する
・関数リテラル表現で定義する

function命令で定義する

function kansu(引数) {
 内容
 return 戻り値;

}

Functionコンストラクタ経由で定義する

var triangle = new Function('base','height','return base * height / 2;');

document.writeln('三角形の面積:' + triangle(5,2));

関数リテラルで定義する

var triangle = function(base,height) {
 return base * height / 2;
}

document.writeln('三角形の面積:' + triangle(5,2));

関数の登録のタイミング

・function命令は、コード解析時に登録される
・Functionコンストラクタ/関数リテラルは実行時に評価される


以下は正常

document.writeln('三角形の面積:' + triangle(5,2));

function triangle(base,height) {
 return base * height / 2;
}


以下はエラー

document.writeln('三角形の面積:' + triangle(5,2));

var triangle = function(base,height) {
  return base * height / 2;
}

return命令の注意点

return命令は途中で改行してはいけない

引数について

・引数はいくつあってもいい
・JavaScriptは、引数の数をチェックしない(関数定義と関数呼び出しとで、引数の数が違っていても問題ない)

引数のデフォルト値を設定する


function triangle(base,height) {
  if (base == undefined) {base = 1;]
  if (height == undefined) {height = 1;]
  return base * height / 2;
}

argumentsオブジェクト

関数呼び出しのタイミングで生成されて、呼び出し元から与えられた引数の値を保持する



function showMessage(value) {
  if (arguments.length != 1) {
    throw new Error('引数の数が間違っています');
  }
  document.writeln(value);
}

try {
  showMessage('あ','い');
} catch(e) {
  window.aler(e.message); //引数の数が間違っています
}

名前付き引数

引数を匿名オブジェクトで受け取らせる



function triangle(args) {
  if (args.base == undefined) {args.base = 1;}
  if (args.height == undefined) {args.height = 1;}
  return args.base * args.height / 2;
}

document.writeln( triangle({base:5,height:4}) );