0

JavaScriptでモジュールパターンを実装するときに、なぜ自己実行コードが必要なのか疑問に思っています。

次のコードは、典型的なモジュール パターンのサンプルです。

    var app = app || {};
    app.model = app.model || {};

    app.model.person = (function () {
        var say = function () {
            alert('say');
        };

        return {
            saySomething: say
        }
    })();

しかし、中括弧を閉じてこの関数を自己実行する必要がある理由がわかりません。

4

3 に答える 3

2

関数/モジュールは、閉じ中括弧で自己実行されるのではなく、最後に で自己実行 (または自己呼び出し) され()ます。

これを行う理由は、JavaScript でプライバシーをエミュレートするためです。関数はすぐに実行され、saySomething関数が返されます。この関数は、クロージャーのために返された後も引き続き使用できるため、パブリックです。関数は返されず、say関数の外部からアクセスできないため、プライベートです

于 2012-06-07T07:40:35.633 に答える
1

このように実装する必要があると誰が言いますか? もっと読みやすい理由はわかりません:

var app = app || {};
app.model = app.model || {};

app.model.person = {
    saySomething: function () {
        alert('say');
    }
}

使えない…

于 2012-06-07T07:39:05.753 に答える
1

あなたの例では、say関数は後で返されたオブジェクトで公開されるため、実際には意味がありません。しかし、これを考慮してください:

app.model.person = (function () {
    var privateVar = 'I am private';

    var say = function () {
        alert(privateVar);
    };

    var doSomething = function() {
        // operates on privateVar
    };

    return {
        saySomething: say
    }
})();

privateVarオブジェクトの外部からは決してアクセスできないため、ここでは理にかなっています。

于 2012-06-07T08:16:52.740 に答える