関数はオブジェクト

javascriptにおける関数はオブジェクトだ! と言われてもいまいちピンとこないのでちゃんと調べて理解してみる。

関数はオブジェクト?

        function static_function() { } 
        for (var prop in window) {
            if (prop == 'static_function') alert("func is window's property")
        }

        window.static_function.foo = 1;
        for (var prop in static_function) {
            alert (prop);
        }

確かに関数はオブジェクトとして振る舞ってる。ちなみにグローバルな関数はwindowオブジェクトのプロパティになる。これは変数も同じ。

関数の定義方法

宣言型/無名関数/関数リテラルの3つがある

function foo(arg) { alert(arg); }            // 宣言型/function文
var foo = new Function('arg', 'alert(arg)'); // 無名関数/コンストラクタ
var foo = function(arg) { alert(arg); };      // 関数リテラル
foo('test');
宣言型
  • function文で宣言
  • 静的で解析は1回のみ
無名関数
  • コンストラクタで生成されるため、実行時に解析される
関数リテラル
  • 式で作成される
  • 解析されるのは1回のみ
See Also