自分用メモ。
極めて文法的なお話。
まず無名関数の基本。
var func = function(){ // 処理 };
上記は無名関数を変数funcに代入した際の例。
実行する際は以下のように記述する。
func();
ところで、この例のように無名関数はいったん変数に詰め込んでやらないと実行できないのだろうか。
答えは否である。但し文法に注意する必要がある。
まずは普通にfuncの部分をまんま無名関数に置き換えてみる。
function(){...}();
が、これは文法的にNGとされる。ではどうすればよいか。
答えは下記の通り。
(function(){...})();
これで望みどおりの挙動を実現する事が出来る。
「function(){}」自体をもう一度括弧「()」で囲うのがポイント。
引数を渡す際も通常通り、最後の括弧に変数を入れてやればよい。
例)
(function(){...})(this);
この書き方を上手に応用すると、Ajax処理のコールバックに、オブジェクト内の関数を指定することが出来たりする(いわゆるクロージャ?)。
Javascriptは本当に奥が深い。
[…] done()直後のfunction()はこのエントリ←で紹介した文法を用いて関数を記述したもの。 流れとしてはまず、戻り値として関数自体を返却する関数にthis(この場合オブジェクトmyFuncsを指す)を渡し変数objとして受け取る。 次に、Ajaxからの返り値を「d」として受けとり、obj内のcallback()関数にその「d」を渡す関数を記述し、その関数自体を返却(return)する。 こうすることでthisのスコープを上手いこと持ちまわしつつコールバック関数を割り当てる事が出来るので、ソースがめちゃくちゃ綺麗になる。 […]