2017-11-27 30 views
0

私は匿名のクロージャとモジュールパターンについて学んでいます。 returnオブジェクトを使用すると、モジュールの一部の機能が公開されることを理解しています。しかし、いくつかの機能をwindow/globalオブジェクトに添付するといういくつかの言及がありました。Javascript anonymous closure - return vs window

windowに添付すれば、もっとハッキーの方が正解でしたか、正当な使用をしたのでしょうか?

(function() { 
    var dog = 'spot'; 
    var says = 'woof'; 
    function speak() { 
     return (dog + ' goes ' + says); 
    } 
    window.speak = speak; 
})(); 

答えて

0

var speakingDog = (function() { 
    var dog = 'spot'; 
    var says = 'woof'; 
    function speak() { 
     return (dog + ' goes ' + says); 
    } 
    return { 
     speak: speak 
    } 
})(); 

windowに属性を追加する(それはそれが何をするか実際だから)グローバル変数を作成することと同じです。

反対側のオブジェクトを返す最初の例では、すべてをカプセル化し、コードが実行されているスコープのspeakingDogで公開しています。むしろ無意味な(speak())グローバルを作成しないので、これははるかにクリーンです。

+0

私は、グローバル変数を作成することは、圧倒的多数の時間ではなく、最善の選択肢であると言わざるを得ないと思います。 – Andrew