Function (関数)

関数 は、他のコードや自分自身、関数を参照する 変数 から呼ばれるコード断片です。関数が呼ばれると、引数 が関数への入力として渡され、次に関数は任意で値を戻します。JavaScript における関数は、オブジェクト でもあります。

関数名は、関数宣言の一部または関数式に含まれる 識別子 です。関数名の スコープ は、関数名が宣言か式かによって決まります。

さまざまな関数の種類

無名関数 とは、関数名のない関数です。関数式のみが無名とすることができ、関数宣言には名前が必要です。

// When used as a function expression
(function () {});
// or using the ECMAScript 2015 arrow notation
() => {};

下記の用語は、ECMAScript 言語仕様で使用されているものではなく、関数の様々な種類を表すための俗称です。

名前付き関数 とは、関数名のある関数です。

// Function declaration
function foo() {};
// Named function expression
(function bar() {});
// or using the ECMAScript 2015 arrow notation
const foo = () => {};

内部関数 は、ほかの関数内に書かれた関数です (この例では square)。外部関数 は、関数を含む関数です (この例では addSquares):

function addSquares(a,b) {
   function square(x) {
      return x * x;
   }
   return square(a) + square(b);
};
//Using ECMAScript 2015 arrow notation
const addSquares = (a,b) => {
   const square = x => x*x;
   return square(a) + square(b);
};

再帰関数 は自身を呼び出す関数です。再帰 を参照してください。

function loop(x) {
   if (x >= 10)
      return;
   loop(x + 1);
};
//Using ECMAScript 2015 arrow notation
const loop = x => {
   if (x >= 10)
      return;
   loop(x + 1);
};

即時実行関数式 (IIFE) は、関数がブラウザーのコンパイラーに読み込まれた直後に呼び出される関数です。 IIFE を見分けるには、関数定義の末尾に追加の左括弧と右括弧があるかどうかで判断できます。

// Declared functions can't be called immediately this way
// Error (https://en.wikipedia.org/wiki/Immediately-invoked_function_expression)
/*
​function foo() { 
    console.log('Hello Foo'); 
}();
*/

// Function expressions, named or anonymous, can be called immediately
(function foo() {
    console.log("Hello Foo");
}());

(function food() {
    console.log("Hello Food");
})();

(() => console.log('hello world'))();

IIFE の詳細を知りたい方は、次の Wikipedia のページを確認してください: Immediately Invoked Function Expression

関連項目

技術リファレンス