• ベストアンサー

謎の文法。。

いつもお世話になっております。 Javascriptの勉強をしていて、 (function (){})(); という構文にあたったのですが、これの意味が分かりません。 ちょっと実験した限りですが、alertするだけの機能を持たせて f = function (){alert("a");} f(); と、 (function(){alert("a");})(); は同じような挙動をしているように感じます。 ただ、前者はその後の処理で再利用可能なのに対し、後者は その場限りの実行になっている? だとすると、単純に alert("a"); とすれば良いじゃないかという話になるので、何か別の機能が あるんじゃないかと思うんですが、この構文について 解説をお願いできればと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • nobuoka
  • ベストアンサー率69% (23/33)
回答No.2

(function() { ... })(); という文ですが、まず一つ目の括弧の中で function() { ... } とあり、これは関数リテラルです。 つまり関数の定義を書いていることになります。 よって、一つ目の括弧を評価すると、関数への参照が得られます。 さらにその後ろに括弧があり、この括弧によって関数が実行されます。 guttten さんも仰っているように  f = function (){alert("a");}  f(); と、  (function(){alert("a");})(); はほとんど同じ動きになります。 で問題はここからで、alert 関数を使用するだけならば  alert("a"); と書けばいいのですが、色んな処理をしたい場合はそういうわけには行きません。 そこで、1 回しか使用しないが、関数形式で処理をまとめてしまいたい、という時に  (function() { .. .})(); という書き方が使われます。 中で条件分岐して関数を返すときなんかによく使われている気がします。 例) var myFunc = ( function() {  if ( condition ) {   return function() { .... };  } else {   return function() { .... };  } } )();

guttten
質問者

お礼

お礼が遅れてしまい大変申し訳ありません!! 非常に分かりやすい解説をありがとうございます。 意義も含めて理解できました。

その他の回答 (1)

回答No.1

f = function (){alert("a");} alert( window.f ); windowにfとういうごみがつく。 いっかこっきりなら、かんすうになまえもつけなくても というのでは?

関連するQ&A