関数もオブジェクトである
皆さんにとって、「関数もオブジェクトである」という考え方は、JavaScriptの壁の一つになるかもしれません。
これを理解してもらうために、「関数は『動くおもちゃ』が入った箱だ」 という例えを使って説明します。
JavaScriptの関数は「持ち運べる箱」
普通のプログラミング言語では、関数は「命令」です。でも、JavaScriptでは関数も 「オブジェクト(モノ)」 です。
箱の中に「仕事のやり方」が書かれた紙が入っているイメージです。箱なので、人にあげたり、受け取ったりできます。これを 「第一級関数」 と呼びます。
1. 変数に代入できる(箱に名前をつける)
関数という箱に、新しい名前をつけて別の場所に置くことができます。
// 1. 「挨拶をする」という関数(かんすう)を作る
const hello = function() {
console.log("こんにちは!");
};
// 2. helloという箱を、別の変数(へんすう)にコピーする
const sayHello = hello;
// 3. 新しい名前で実行できる
sayHello(); // "こんにちは!"
2. 引数にできる(箱をプレゼントする)
関数を、別の関数に「材料」として渡すことができます。これを 「コールバック関数」 と言います。
留学生への例え: 「料理ロボット」に、「切る」という仕事をプレゼントするようなものです。
// 「実行ボタン」という関数(かんすう)
function pushButton(task) {
console.log("ボタンを押しました。");
task(); // 渡された関数(かんすう)を実行する
}
const clean = function() {
console.log("掃除をします!");
};
// 掃除という箱を引数(ひきすう)として渡す
pushButton(clean);
3. 返り値にできる(箱を作って返す)
関数を実行した結果として、新しい「関数の箱」をもらうことができます。
留学生への例え: 「おもちゃの工場」に頼んで、自分だけの「特別なおもちゃ(関数)」を作ってもらうイメージです。
function makeRobot(name) {
// 新しい関数(かんすう)を作って、外に返す
return function() {
console.log("私は" + name + "ロボットです。");
};
}
const dora = makeRobot("ドラ");
dora(); // "私はドラロボットです。"
留学生へのまとめ(青空文庫形式)
JavaScriptでは、関数は単なる「動き」ではありません。 それは、名前をつけたり、誰かに渡したりできる 「大切なモノ(オブジェクト)」 です。
- 変数への代入: 箱を棚に置くこと。
- 引数: 箱を友達に貸してあげること。
- 返り値: 箱を新しく作って届けてもらうこと。
この「箱をやり取りする」という考え方ができるようになると、JavaScriptがもっと楽しくなりますよ!
いかがでしょうか。関数を「命令」ではなく「持ち運べるオブジェクト」として見せることがポイントです。