21 / 2777%

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));

関数は値として扱えるため、配列の要素にもできます。結果は106です。