関数リテラル

関数を一時的に使用したい場合、関数リテラルを使用することができます。

関数リテラル

関数リテラルは以下の形をしています。

識別子 = function (引数1, 引数2, ... , 引数n) {
    ブロック
};

通常の関数定義とほとんど同じ構文ですが、関数名が無く、関数を識別子に代入する形になっています。

例 ballを動かす関数を関数リテラルで定義

var move = function (speed) { // 関数リテラルで定義
    ball._x+=speed*Math.cos(ball._rotation/180*Math.PI);
    ball._y+=speed*Math.sin(ball._rotation/180*Math.PI);
}

move(10); // 関数の実行

関数リテラルと関数定義の違い

  • 関数リテラルはセミコロンで終わるが、関数定義はセミコロンで終わらない。
  • 関数リテラルで作成した関数は、実行された後でしか使用できない。関数定義は関数定義の前でも使用することができる。

メソッドの定義

関数リテラルはクラスやオブジェクトにメソッドを代入するときに使用します。

オブジェクト名.メソッド名 = 関数リテラル;

例 関数リテラルを使ったメソッドの定義

ball.move = function (speed) { // 関数リテラルで定義
    this._x+=speed*Math.cos(this._rotation/180*Math.PI);
    this._y+=speed*Math.sin(this._rotation/180*Math.PI);
}

ball.move(10); // 関数の実行

関数を使ったメソッドの定義もできます。

オブジェクト名.メソッド名 = 関数;

例 関数を使ったメソッドの定義

function move(speed) { // 関数で定義
    this._x+=speed*Math.cos(this._rotation/180*Math.PI);
    this._y+=speed*Math.sin(this._rotation/180*Math.PI);
}

ball.move=move; // メソッドの定義

ball.move(10); // 関数の実行

上記の関数リテラルを使った場合との違いは、ball.move()メソッドの他にmove()関数が残ることです。