(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で質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript gasについて 1 2022/05/31 21:51
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
- JavaScript 定積分の近似値を計算する関数composite_newton_cotesをつくりたい 1 2023/01/18 14:09
- JavaScript JavaScriptの即時関数の書き方 1 2022/11/29 09:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
idを使わずにonclickで自身の要...
-
関数でy=g(x)のgとは何の略です...
-
functionから別のfunctionを実...
-
jQuery|:not(:animated)
-
jQueryの :not() .not() が有効...
-
JavascriptのFunctionの構文に...
-
javascriptのreturnがわからない
-
jslintのエラーについて質問
-
文字を一文字ずつ表示
-
同じIDで定義した要素の配列を...
-
javaScript textareaの一行あた...
-
C#テキストボックスの文字を配...
-
ジェネレーターの作り方
-
google apps scriptの終了のさせ方
-
正規表現で半角数字1桁のみを全...
-
innerHTML実行後のイベント
-
なぜmatchメソッドがエラーにな...
-
ボタンをクリックすると数が増...
-
Java Scriptのメソッドについて
-
jspからjavascriptの変数引継ぎ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数でy=g(x)のgとは何の略です...
-
idを使わずにonclickで自身の要...
-
functionから別のfunctionを実...
-
jslintのエラーについて質問
-
要素名がスペースを含む場合のj...
-
javascript(jQuery)でセル内...
-
ajax反映後のjqueryが動かない
-
jQueryの :not() .not() が有効...
-
getElementByIdを使用したグロ...
-
クリックすると上に開くアコー...
-
コードをスマートにさせたい。
-
jQueryの"return false"の役割...
-
jQueryが読み込めない
-
個別では動く、javascriptのエラー
-
一つのアクションで関数を二つ...
-
jqueryの変数を関数の外に出す方法
-
R言語
-
jQuery|:not(:animated)
-
スムーズに動く アニメーション...
-
即時関数でプライベート変数的...
おすすめ情報