LESSON 21 ・ 関数
第一級関数
関数を変数に代入する
let a = Math.abs(-2);
console.log(a);
前に絶対値を計算する関数Math.absを使いました。
let a = Math.abs;
let b = a(-2);
console.log(b);
JavaScriptでは、Math.abs(-2)のように関数に値を渡して呼び出すだけでなく、Math.absという関数そのものを変数に代入することができます。変数に代入された関数は( )で値を渡して呼び出すことができます。
ここでは関数Math.absを変数aに代入し、a(-2)で呼び出しています。
function square(x) {
return x * x;
}
let a = square;
let b = a(3);
console.log(b);
自分で定義した関数も、同じように変数に代入できます。
このように、JavaScriptでは関数を数値や文字列と同じように値として扱えます。このような性質を持つ関数を第一級関数(だいいっきゅうかんすう, first-class function)と呼びます。
PRACTICE
演習問題
コードを自分で書いて実行してから、答えと解説を確認しましょう。
問題1
整数を2乗する関数squareを定義し、その関数自体を変数fに代入してください。f(5)の結果を表示してください。
答えと解説を見る
模範解答
function square(x) {
return x * x;
}
let f = square;
console.log(f(5));
関数を呼び出す( )を付けずにsquareと書くと、関数そのものを変数へ代入できます。fからも同じ関数を呼び出せます。
問題2
絶対値を求める関数Math.absを変数fに代入し、f(-8)の結果を表示してください。
答えと解説を見る
模範解答
let f = Math.abs;
console.log(f(-8));
組み込みの関数も変数へ代入できます。変数fに-8を渡して呼び出すと、絶対値の8が返されます。
問題3
整数を2倍する関数doubleと、整数を1増やす関数addOneを定義してください。二つの関数を一つの配列にまとめ、それぞれに5を渡した結果を表示してください。
答えと解説を見る
模範解答
function double(x) {
return x * 2;
}
function addOne(x) {
return x + 1;
}
let functions = [double, addOne];
console.log(functions[0](5));
console.log(functions[1](5));
関数は値として扱えるため、配列の要素にもできます。結果は10と6です。