2017-02-14 18 views
3

私は、アプリケーション用の小さなjavascriptモジュールを構築しようとしています。私はオブジェクトリテラルとIIFEの2種類のコード整理方法に慣れてきました。私は、IIFEでは、他に公開されていない限り、すべての変数と関数が非公開であることを知っていますが、それをオブジェクトリテラルに対して使用する理由は他にありますか?IIFE対オブジェクトリテラルを使用するタイミングは?

なぜ私はオブジェクトリテラルを使用します:あなたはES6あるモジュールを編成する第三、より良い方法を、学ぶべき

var app = (function(){ 
    var gojiraSays = 'Toxic Garbage Island!!!' 

    var yellGojira = function(){ 
    console.log(gojiraSays); 
    } 

    return{ 
    yellGojira: yellGojira 
    } 

}()); 

app.yellGojira(); 
+2

これはあまりにも多くの異なることに依存します。たとえば、WebPackなどでモジュールを使用する場合、IIFEは完全に冗長です。 – Marty

+1

編集後、はい、IIFEでラッピングすることの利点はカプセル化です(あなたの 'gojiraSays'を混乱させることはありません)。他の文脈にはIIFEがあります(オブジェクトリテラルとは対照的ではありません)。 'for'または' while'ループの中でローカル変数の値を取得する代わりに、非同期コールバックの変数そのものを取得します([こちら](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-実用例))。 – Amadan

+1

これらは2つの異なるものです。 IIFEは(私的)変数のカプセル化を扱いますが、Objectは一緒に属するものを結合/グループ化する構造を提供します。 IIFEは構造体を提供せず、オブジェクトはカプセル化を提供しません。あなたの質問は、機能や変数を好むことを求めるようなものですか?両方が必要な場合は、おそらくそれらを組み合わせます。 – Thomas

答えて

1

:オーバー生命維持のバージョンを言う...

var gojiraSays = 'Toxic Garbage Island!!!' 

var app = { 

    printStuff: function(){ 
    console.log(gojiraSays) 
    } 

} 

をこれはすべて無関係になります。

// app.js 
const gojiraSays = 'Toxic Garbage Island!!!' 

export function printStuff() { 
    console.log(gojiraSays) 
} 

// consumer.js 
import {printStuff} from './app'; 

printStuff(); 

この作業を行うには、Babel蒸散ステップなどのインフラストラクチャが必要です。

2

モジュールパターン

明かすモジュールパターン(RMP)と一緒にオブジェクトリテラルを使用することの利点についての知識を得るためにthis答えを参照してください。

生命維持

プロジェクト構築のための生命維持用のを使用することの利点についての情報を取得するためにthisリンクを参照してください。

私の提案

私はそれを効率的に別の懸念にできますようRMPを使用して好むでしょうと同時に可読性が向上します。

+0

私はこの答えによって混乱しています。愚かな名前の "明らかなモジュールパターン" **は** IIFEを使用するので、どのように2つを何らかの形で代替として扱うことができますか? –

+0

これは疑問に答えるのに役立ちますhttp://stackoverflow.com/questions/22906662/javascript-design-pattern-difference-between-module-pattern-and-revealing-modul –

関連する問題