JavaScript 関数定義

❮ 前章へ 次章へ ❯

JavaScript の関数は、function キーワードで定義します。

関数宣言や関数が使用できます。


関数宣言

このチュートリアルの前段で、次の構文を持つ関数宣言について学習しました:

function functionName(parameters) {
  code to be executed
}

宣言された関数は、直ぐには実行されません。「後で実行するために保存」されているもので、呼出されたときに実行します。

function myFunction(a, b) {
    return a * b;
}
Try it Yourself »

セミコロンは、実行可能な Javascript 文を区切るために使用します。
関数宣言は、実行可能な文ではないので、セミコロンで終了するのは一般的ではありません。


関数式

JavaScript 関数は、 を使用して定義することもできます。

関数式は、変数に格納することができます:

var x = function (a, b) {return a * b};
Try it Yourself »

関数式を変数に格納した後で、その変数を関数として使用すことができます:

var x = function (a, b) {return a * b};
var z = x(4, 3);
Try it Yourself »

上の関数は、匿名関数 (無名関数) と言います。

変数に格納された関数は、関数名を必要とせず、常に変数名を使用して呼出します。

上の関数は、実行可能文であるため、セミコロンで終了しています。


Function() コンストラクタ

前の例で見たように、JavaScript 関数は function キーワードで定義しています。

関数はまた、JavaScript の Function() と言う組込み関数コンストラクタを使用しても定義することができます。

var myFunction = new Function("a", "b", "return a * b");

var x = myFunction(4, 3);
Try it Yourself »

実際には、関数コンストラクタを使用する必要はありません。上の例では、次のように書くことと同じです:

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

var x = myFunction(4, 3);
Try it Yourself »

ほとんどの場合、JavaScript では new キーワードの使用を回避することができます。


関数の巻き上げ

このチュートリアルの前段で、「巻き上げ」について学習しました。

巻上げは JavaScript のデフォルト動作で、現在のスコープの先頭に宣言を移動します。

巻上げは、変数の宣言と関数の宣言に適用されます。

このため、宣言する前で JavaScript 関数を呼び出すことができます:

myFunction(5);

function myFunction(y) {
    return y * y;
}

式を使用して定義された関数は、巻き上げられません。


即時(Self-Invoking)関数

関数式は「自己呼出し」にすることができます。

自己呼出し式は、呼出さなくとも自動的に実行されます。

式の後に () が続いている場合、関数式は自動的に実行されます。

関数宣言を、自己呼び出しにすることはできません。

関数式であることを表すために、function の周りに括弧を追加する必要があります:

(function () {
    var x = "Hello!!";      // I will invoke myself
})();
Try it Yourself »

上の関数は、匿名即時関数(無名関数)です。


関数は値のように使用することができる

JavaScript 関数は、値のように使用することができます:

function myFunction(a, b) {
    return a * b;
}

var x = myFunction(4, 3);
Try it Yourself »

JavaScript 関数は、式のように使用することができます:

function myFunction(a, b) {
    return a * b;
}

var x = myFunction(4, 3) * 2;
Try it Yourself »

関数はオブジェクトです

JavaScript の typeof 演算子は、関数に対しては "function" を返します。

しかし、JavaScript 関数は、最良のオブジェクトとみなすことができます。

JavaScript 関数には、プロパティメソッドの両方があります。

arguments.length プロパティは、関数が呼び出された時に、受信した引数の数を返します:

function myFunction(a, b) {
    return arguments.length;
}
Try it Yourself »

toString() メソッドは、文字列として関数を返します:

function myFunction(a, b) {
    return a * b;
}

var txt = myFunction.toString();
Try it Yourself »

オブジェクトのプロパティとして定義された関数は、オブジェクトに対するメソッドと呼ばれます。
新しいオブジェクトを作成するためにデザインされた関数は、オブジェクト・コンストラクタと呼ばれます。


❮ 前章へ 次章へ ❯