0

以下のような JavaScript コードがあります。

var foo = (function() {
    //Private vars
    var a = 1;

    return {
        //Public vars/methods
        a: a,
        changeVar: function () {
            a = 2;
        }
    }
})();

public vars/methods の構文がどのように機能するのかわかりませんか? 変数/メソッドを「返す」だけでそれらが public になる方法を教えてください。

ありがとうございました。

4

2 に答える 2

1

変数の値は、foo実際にはこの関数によって返される値です。最後の行の、は()、この関数がすぐに評価されることを示しています。関数を評価し、その戻り値を変数に割り当てることにより、ローカル(関数)スコープ内の変数を非表示にして、そのスコープ外でアクセスできないようにすることができます。返されたオブジェクトのメンバーのみがアクセス可能ですが、内部の関数はすべて外部スコープでクロージャーを形成するため、ローカル(非表示)変数を引き続き使用できます。

この例は、一部のローカル状態を非表示にし、メソッドを介してのみアクセスを許可することです。

var foo = (function() {
    //Private vars
    var a = 1;

    return {
        //Public methods
        getVar: function () {
            return a;
        },
        setVar: function (val) {
            a = val;
        }
    }
})();
于 2013-02-27T17:57:04.223 に答える
0

さて、無名関数でオブジェクトを返しました。これは、オブジェクトがに割り当てられていることを意味しますfoofoo.aしたがって、やなどのオブジェクトのプロパティにアクセスできますがfoo.changeVar、関数のスコープ内にプライベート変数を引き続き存在させることができます。より具体的な質問がなければ、多くのことを助けることはできません。

于 2013-02-27T17:57:16.953 に答える