3

関数にスコープがある場合は、そのスコープ内で実行する必要がありますが、ここでは異なると思いますコードを参照してください。

function foo() {
    var privateVal = "Private Val";
    this.publicVal = "Public Val";

    var privateAlert = function (str) {
        alert(str + this.publicVal);
        alert(str + privateVal);
    }

    this.Run = function () //see here
    {
        privateAlert("Private Call: ");

        this.publicAlert = privateAlert;
        this.publicAlert("Public Call: ");

        privateAlert = this.publicAlert;
        privateAlert("Private Call: ");
        this.publicAlert("Public Call: ");
    }
}

var bar = new foo();
bar.Run();

新しいオブジェクトが作成されるRun()と、オブジェクトの public メソッドまたは var にのみ属するメソッドになりbarます。privateAlert()そのメソッドは、その中から関数を実行できないはずです。関数にはスコープがあるため、宣言された関数内からのみ実行できますが、この関数は作成されたスコープを失い、まだ実行中です。これを明確にしてください。

4

1 に答える 1

6

簡単な説明:

  1. 関数内で宣言された変数は、その関数外ではアクセスできません。
  2. 内部関数は、外部スコープで宣言された変数にアクセスできます(クロージャを参照)。

したがって、両方がの内部で定義されているため、privateAlertから呼び出すことができます。Runfoo

もう1つ、のプライベートメソッドでRunなくbar、パブリックメソッドです。

于 2013-02-05T16:58:01.947 に答える