--- title: First-class Function (第一級関数) slug: Glossary/First-class_Function tags: - CodingScripting - Glossary - JavaScript translation_of: Glossary/First-class_Function ---
プログラミング言語が第一級関数 (First-class functions) を持つと言われる場合、その言語の関数がその他の変数と同様に扱われることを表します。例えば、こうした言語では、関数を他の関数への引数として渡したり、他の関数から返却したり、変数の値として代入したりすることができます。
const foo = function() { console.log("foobar"); } // 変数を使用して呼び出し foo();
ここでは無名関数を{{glossary("Variable", "変数")}}に代入してから、変数を使用して末尾に括弧 ()
を追加することで、その関数を呼び出しています。
関数に名前があっても、変数を使用してその関数を呼び出すことができます。名前を付けるとコードをデバッグするときに役立ちますが、呼び出し方法に影響はありません。
function sayHello() { return "Hello, "; } function greeting(helloMessage, name) { console.log(helloMessage() + name); } // `sayHello` を `greeting` 関数の引数として渡す greeting(sayHello, "JavaScript!");
ここでは sayHello()
関数を greeting()
関数の引数として渡しており、関数を変数として扱っていることを示しています。
他の関数へ引数として渡される関数は、{{glossary("Callback function", "コールバック関数")}}と呼ばれます。 sayHello
はコールバック関数です。
function sayHello() { return function() { console.log("Hello!"); } }
この例では、関数を他の関数から返す必要があります。 - 関数を返すことができるのは、 JavaScript では関数を値として扱っているからです。
関数を返す関数は高階関数と呼ばれます。
例に戻ると、 sayHello
関数とそこから返される無名関数
を呼び出す必要があるとします。そのためには二つの方法があります。
const sayHello = function() { return function() { console.log("Hello!"); } } const myFunc = sayHello(); myFunc();
この方法では、 Hello!
メッセージが返されます。
他の変数を使用する必要があります。直接 sayHello
を呼び出すと、帰される関数を呼び出すことなく関数自体が返されます。
function sayHello() { return function() { console.log("Hello!"); } } sayHello()();
二重括弧 ()()
を使用して、返された関数を呼び出しています。