0

次に例を示します。

function outerFunc(){
    //some variable 

    var x = 10;

    Obj = function(){  //Its global function created without var keyword
        this.a = x;
    }
}

そのため、関数Objを呼び出した後にオブジェクトの新しいインスタンスを作成すると、.outerFunc

outerFunc();

myObj = new Obj();

myObj.a;  //prints 10 

したがって、グローバルコンストラクターとしてx定義するときに、関数のプライベート変数を含むものをどのように読み取ることができるのでしょうか。それでも値を読み取ることができます。Obj

4

1 に答える 1

2

xクロージャーで宣言されたプロパティに外部からアクセスすることはできません。

ここでは、プライベート変数の値を読み取るのではxなく、作成して に保存したコピーを 読み取りますa

あなたの質問がx関数内からアクセスできる理由である場合Obj:それは単にクロージャーの仕組みです:関数は、宣言されたスコープの変数にアクセスできます。この関数がObj変数に割り当てられ、この変数がグローバルであるという事実は、まったく何も変わりません。

ここにいくつかの追加の読み物があります:クロージャに関するMDN

于 2013-09-14T10:33:18.953 に答える