(function(){})() の意味がよくわからずに困っています。
下記の2タイプではどう意味が変わってくるのでしょうか?
(1)var fuga = function(){};
(2)var fuga = (function(){})();
下記のコードで実験してみたところ、
---------------------
var fuga = function(){
this.obj = 'value';
};
var fuga = (function(){
return {
obj = 'value';
};
})();
---------------------
(1)の場合は、newしないとfugaオブジェクトのメンバを使用できない、
(2)の場合は、newしなくてもfugaオブジェクトのメンバを使用できるようなのですが、
(2)で(function(){})を取り除いて出てくる()はnewのエイリアスだったりするのでしょうか?
No.3ベストアンサー
- 回答日時:
var fuga = (function(){})();
は
var fuga = function(){}();
と同じです
つまり関数を定義してすぐ呼んでいるだけです
No.2
- 回答日時:
var hoge = function(){return "foo";};
var fuga = hoge();
をhogeを使わずに一行で書くと
var fuga = (function(){return "foo";})();
になります。
No.1
- 回答日時:
比較するコードがちょっと変ですね。
2つの無形関数は内容が異なっています。オブジェクトのメンバ云々というのは、関数の内容が違うのでやや意味不明な質問になっています。もっとシンプルにわかりやすく考えてみてください。例えば、以下はいずれも同じ内容の無名関数を使っています。
var fuga1 = function(){
return'value';
};
var fuga2 = (function(){
return 'value';
})();
例えば、このようにどちらにも同じ無名関数を指定して試してみるとよくわかります。fuga1には関数オブジェクトが代入され、fuga2には無名関数の実行結果(ここでは'value'というテキスト)が代入されます。
つまり、(function(){……})();という書き方は、()内の無名関数をその場で実行した結果が入るのに対し、無名関数をそのまま代入した場合は関数オブジェクトが入るのでその関数を実行しなければ結果が得られない、ということですね。
従って、コンストラクタ関数などのように関数オブジェクトそのものを用意したいか、関数の実行結果だけを欲しいのか、という違いで使い分けていると考えればいいでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
getElementByIdを使用したグロ...
-
functionから別のfunctionを実...
-
関数でy=g(x)のgとは何の略です...
-
クロージャーの利点が理解できない
-
Javascriptの変数がうまく渡せ...
-
jQueryの導入について
-
これも関数ですか?
-
大分類・中分類・小分類のvalue...
-
同じIDで定義した要素の配列を...
-
C#テキストボックスの文字を配...
-
C#OpenCv V4にのエラーに関する...
-
パス付きサイトのjavascript解析
-
undefinedを表示させない方法は...
-
イベントが初めの一回しか起き...
-
class指定したHTML要素の背景色...
-
【西暦等の変換】
-
15パズルの作り方が分かりません!
-
ジェネレーターの作り方
-
javascriptの正規表現で変数を扱う
-
onchangeイベントを使ってspan...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数でy=g(x)のgとは何の略です...
-
idを使わずにonclickで自身の要...
-
functionから別のfunctionを実...
-
jQueryの :not() .not() が有効...
-
処理前の「お待ちください」
-
jslintのエラーについて質問
-
XMLHttpRequestでキャッシュを...
-
クリックすると上に開くアコー...
-
コードをスマートにさせたい。
-
関数名をテキストから読み込む...
-
jqueryの変数を関数の外に出す方法
-
シューティングゲームの作り方
-
要素名がスペースを含む場合のj...
-
getElementByIdを使用したグロ...
-
XMLHttpRequestオブジェクトが...
-
jQueryが読み込めない
-
Ajaxでデータベース(PostgreSQL)
-
setTimeoutで、止まらない
-
jQueryでzipを解凍読み込みする...
-
CDの曲をケータイのSDに移す
おすすめ情報