javascriptの関数は、静的なスコープを持ち第一級オブジェクトであるとjavascript theGoodPartsに書いてありました。
第一級関数なら、関数を普通の値の如く変数に値を代入したり、関数の返り値として扱えたりすることを意味しますが、第一級オブジェクトが何なのか良くわかりません。
wikipediaで調べてみたのですが、生成や代入、演算、受け渡しを制限無しに行える他、以下のような特徴があるうえ、第一級オブジェクトのオブジェクトは、
いわゆる、{a:1,b:"第一級オブジェクト"}
のようなオブジェクトではなく広く対象物、客体を指すそうです。
無名のリテラルとして表現可能である。
変数に格納可能である。
データ構造に格納可能である。
それ自体が独自に存在できる(名前とは独立している)。
他のものとの等値性の比較が可能である。
プロシージャや関数のパラメータとして渡すことができる。
プロシージャや関数の戻り値として返すことができる。
実行時に構築可能である。
表示可能である。
読み込むことができる。
分散したプロセス間で転送することができる。
実行中のプロセスの外に保存することができる。
二番目の変数に格納できるというのは、第一級関数と同じなので理解できますが、それ以外は、さっぱりわかりません。
第一級オブジェクトとは、いったい何なのでしょうか。噛み砕いて説明していただけるとさいわいです。