🐡

JavaScript / 関数は「実行可能なオブジェクト」

2025/01/11に公開

データ型についておさらい

プリミティブ型 オブジェクト型
string object
number array
bigint function
boolean
undefined
null
symbol

なぜfunctionがオブジェクト型にカテゴライズされているのか?

そもそもオブジェクト型とは

プリミティブ型以外のものをオブジェクト型(非プリミティブ型)というらしいが、厳密にいえばプロパティと値をペアで持つことができるものと定義される

注) 以降は
オブジェクト型(データ型)
object(オブジェクト型に分類されるプロパティとメソッドを持つデータ構造)
と使い分ける

objectの場合

const person = {
    name: "Alice",
    age: 25
}

console.log(person.name)
// > Alice

arrayの場合

const fruits = ["apple", "banana", "orange"]
console.log(fruits[1])
// > banana
// この場合indexがプロパティと考える

実は関数(function)もプロパティとメソッドを持つことができる

function person() { }

person.firstname = "john";
person.greeting = function () {
  return "hello";
};

console.log(person.firstname);
// > john
console.log(person.greeting());
// > hello

まとめ

プロパティと値をペアで持つことができるものがオブジェクトであるならば、関数もオブジェクトである。これにより、動的にプロパティやメソッドを登録することができる。
こういった細かい使用をどれほど知っているかで、JavaScriptへの理解はかなり変わってくると思う。

Discussion