JavaScriptのfunction文とfunction式を考えてみる

まずJavaScriptの関数のおさらい。
以下の二つは同じ意味。
function hoge() {}

var hoge = function() {};//無名関数を代入

両者の違いはかということ。
前者は文、後者は式である。
どちらを使うかはプログラマの好みであるが、自分は後者を使い続けてる。
理由は、関数を値として持つ変数ということを常に意識しているから。
JavaScriptではfunctionが文か式かを把握していないとのちのち困ることが出てくる。

特に
文では通常「関数の巻き上げ」という現象が起こる。「関数の巻き上げ」とは、スコープに関することで、JavaScriptでは関数を文で置くとどこに置かれているかに関わらず、スコープの一番先頭に移動されるのである。
文だけ。
関数呼び出し部分よりも後に記述しても呼び出し可能なのはこのため。
自分はゆるい感じでソース書くから文を使うと非常に危険なことに・・・関数は式のほうがスマートでコーディングしやすい!

JavaScriptのfunctionに関して余談だけど
以下はamachangさんの記事なんですが・・・、
(function(){})() と function(){}()

↑からわかるように
いきなり function(){}() なんて書けない!
なぜならJavaScriptでは「function」という単語から始まる文はfunction文であることがルールであるから。
もしfunctionから書きたいなら (function(){})()と書こう。

ってか function(){}()←最後の丸括弧をつけることによって・・・
まず以下の例を。
var foo = function() {
    var value = 0;
    return {
        hoge: function(num) {
            return value += typeof num === 'number' ? num : 1;
        },
        getValue: function() {
             return value;
        }
    };
}();
foo.hoge(5) //5
foo.getValue() //0
つまり、丸括弧は関数を呼び出した結果得られる戻り値を変数fooに代入している。

ちなみに上の式には、「クロージャ」の要素も取り入れている。
クロージャに関しては次回の記事で!

以上。自分用JavaScript日記でした。