電子書籍の厳選無料作品が豊富!

(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のエイリアスだったりするのでしょうか?

A 回答 (3件)

var fuga = (function(){})();



var fuga = function(){}();
と同じです
つまり関数を定義してすぐ呼んでいるだけです
    • good
    • 0

var hoge = function(){return "foo";};


var fuga = hoge();

をhogeを使わずに一行で書くと

var fuga = (function(){return "foo";})();

になります。
    • good
    • 0

比較するコードがちょっと変ですね。

2つの無形関数は内容が異なっています。オブジェクトのメンバ云々というのは、関数の内容が違うのでやや意味不明な質問になっています。

もっとシンプルにわかりやすく考えてみてください。例えば、以下はいずれも同じ内容の無名関数を使っています。

var fuga1 = function(){
return'value';
};

var fuga2 = (function(){
return 'value';
})();

例えば、このようにどちらにも同じ無名関数を指定して試してみるとよくわかります。fuga1には関数オブジェクトが代入され、fuga2には無名関数の実行結果(ここでは'value'というテキスト)が代入されます。

つまり、(function(){……})();という書き方は、()内の無名関数をその場で実行した結果が入るのに対し、無名関数をそのまま代入した場合は関数オブジェクトが入るのでその関数を実行しなければ結果が得られない、ということですね。

従って、コンストラクタ関数などのように関数オブジェクトそのものを用意したいか、関数の実行結果だけを欲しいのか、という違いで使い分けていると考えればいいでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!