2017-11-14 2 views
2

誰かがこのjavascriptの断片を説明できますか?

// JavaScript source code 
 
var foo = (function() { 
 
    var o = { bar: "bar" }; 
 

 
    return { 
 
     bar: function() { 
 
      console.log(o.bar); 
 
     } 
 
    }; 
 

 
})(); 
 

 
foo.bar();

何が起こっているの? fooはオブジェクトですか?名前付き関数ですか? プライベートデータメンバーのクラスコンセプトを提供するためには、これは恐ろしい方法です。

+2

[(function(){...})() "のような匿名関数でJavascriptファイル全体をラップする目的は何ですか?(https://stackoverflow.com/questions/2421911/what-is) -the-wrapping-of-wrapping-javascript-files-in-anonymous-functions-li) – SLaks

+0

@SLaks私は「いいえ」と言います。その質問は、ファイル全体についてです。無名関数は純粋にコードを実行し、値を返しません。 – Kayla

答えて

1

彼らは生命維持のがhttp://javascriptissexy.com/understand-javascript-closures-with-ease/

を使用している。この例では、通常のJavaScriptモジュールはパターンで書かれているIIFEさんhttps://developer.mozilla.org/en-US/docs/Glossary/IIFE

チェックと呼ばれています。

var foo = function() { 
    var o = { bar: "bar" }; 

    return { 
     bar: function() { 
      console.log(o.bar); 
     } 
    }; 

}; 

foo().bar(); 

var foo = (function() { 
    var o = { bar: "bar" }; 

    return { 
     bar: function() { 
      console.log(o.bar); 
     } 
    }; 

})(); 

foo.bar(); 

似ています。

+0

あなたの最初の例は、私が見たいと思ったものです..... – SirPaulMuaddib

+0

はい、余分な角括弧を追加すると、割り当て中に関数を実行しています。すでに戻り値があるようです。上にリンクされた記事をチェックして、それは良い例があります。 –

1

fooはオブジェクトです。 return文の後のオブジェクトです。

このコードは、これらのかっこ内の関数を宣言してからすぐに呼び出します。関数が返す値は、fooに代入されます。

+0

私は確信していませんでした。それはfooが名前付き関数であるように見えました。関数に割り当てられました。はい、iife ... – SirPaulMuaddib

+0

@SirPaulMuaddib:もっと慎重に読んでください。それは関数を呼び出した結果に割り当てられています。 – SLaks

関連する問題