JavaScript ファンクションの定義

JavaScriptの関数は、 function キーワード定義の。

関数を使用できます。宣言または関数表現

関数宣言

このチュートリアルで少し前に学んだように、以下の構文で宣言関数:

function 関数名(パラメータ) {
   実行するコード
}

宣言された関数は直接実行されません。彼らは「後で使用するために保存されます」、呼び出されたときに後で実行されます。

インスタンス

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

自分で試してみる

セミコロンは、実行可能なJavaScript文を区切ります。

関数宣言実行可能な文ではありません。セミコロンで終わることはよくありません。

関数表現を使用して

JavaScriptの関数は、表現定義するために。

関数表現は変数に保存できます:

インスタンス

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

自分で試してみる

関数表現を変数に保存した後、その変数は関数として使用できます:

インスタンス

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

自分で試してみる

上の関数は実際には以下のものです:匿名関数(名前のない関数)。

変数に保存された関数には関数名は必要ありません。彼らは常に変数名を使用して呼び出されます。

上の関数はセミコロンで終わります。それは実行可能な文の一部です。

Function()構造体で

前の例でご覧いただいたように、JavaScriptの関数は function キーワードで定義された。

関数は、名前が Function() の内蔵JavaScript関数構造子を使用して定義できます。

インスタンス

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

自分で試してみる

実際には、関数構造子を使用する必要はありません。以下のように書いても同じです:

インスタンス

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

自分で試してみる

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

関数昇格

このチュートリアルで少し前に、「昇格」(hoisting)について学びました。

HoistingはJavaScriptが宣言現在のスコープの先頭に移動するデフォルトの動作です。

Hoistingは変数宣言と関数宣言に適用されます。

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

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

表現で定義された関数は昇格されません。

自呼び出し関数

関数表現は「自呼び出し」として機能できます。

自呼び出し表現は自動的に呼び出されます(開始)が、呼び出しを行わない場合もあります。

関数表現は自動的に実行されますが、表現の後ろに ()

関数宣言に対して自呼び出しはできません。

関数表現を示すために、関数の周りに括弧を追加する必要があります:

インスタンス

(function () {
    var x = "Hello!!";      // 自分自身を呼び出します
}();

自分で試してみる

上の関数は実際には以下のものです:匿名の自関数(名前のない関数)。

関数は値として使用できます

JavaScriptの関数は値として使用できます:

インスタンス

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

自分で試してみる

JavaScriptの関数は表現式中使用できます:

インスタンス

function myFunction(a, b) {
    return a * b;
}
var x = myFunction(4, 3) * 2;

自分で試してみる

関数はオブジェクトです

JavaScriptの typeof 演算子は関数に「」を返します:function「」。

ただし、JavaScriptの関数をオブジェクトとして説明するのが最善です。

JavaScriptの関数にはすべてあります属性およびメソッド

arguments.length 関数が呼び出されたときに受け取った引数の数を返します:

インスタンス

function myFunction(a, b) {
    return arguments.length;
}

自分で試してみる

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

インスタンス

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

自分で試してみる

オブジェクト属性として定義された関数は、オブジェクトのメソッドと呼ばれます。

新しいオブジェクトを作成するために設計された関数は、オブジェクト構造関数(オブジェクト構造器)と呼ばれます。

アロー関数

アロー関数は、関数式を簡略化するために使用される短い文法を提供します。

functionキーワード、returnキーワード、およびブラケットは必要ありません。

インスタンス

// ES5
var x = function(x, y) {
  return x * y;
}
// ES6
const x = (x, y) => x * y;

自分で試してみる

アロー関数には自分自身のthisがありません。したがって、オブジェクトメソッドとして定義するのに適していません。

アロー関数は昇格されません。使用前に定義する必要があります。

constを使用することはvarを使用するよりも安全です。なぜなら、関数式は常に常量値であるためです。

関数が単一のステートメントである場合、return キーワードおよびブラケットを省略することができます。したがって、それらを保持することが良い習慣になるかもしれません:

インスタンス

const x = (x, y) => { return x * y };

自分で試してみる

IE11 以降のバージョンではアロー関数がサポートされていません。