0
// Situation 1 
var a = function A() { 
    this.x = 1;
    var b = function B () {
        this.x = 2;
        console.log('Method B : x = ' + this.x);
    };
    console.log('Method A : x = ' + this.x);
    b();
}

a()を呼び出すと、結果は次のようになります。

Method A : x = 1
Method B : x = 2

しかし、「this.x = 2」を次のように削除すると、次のようになります。

// Situation 2
var a = function A() { 
    this.x = 1;
    var b = function B () {
        console.log('Method B : x = ' + this.x);
    };
    console.log('Method A : x = ' + this.x);
    b();
}

私の結果は

Method A : x = 1
Method B : x = 1

理由がわかりません

  • 状況2:関数Bの「this」は関数Aの「this」を参照しています

だが

  • 状況1:関数Bで「this.x = 2」を割り当てても、関数Aの「this.x」は変更されません。

私のコードはChromev23で実行されます

4

5 に答える 5

2

は関数Bの定義に含まれているため、定義されたときではなく、 this.x = 2Bが呼び出されるまで発生しません。このバージョンを試して、以下を参照してください。

// Situation 3
var a = function A() { 
    this.x = 1;
    var b = function B () {
        this.x = 2;
        console.log('Method B : x = ' + this.x);
    };
    console.log('Method A before B: x = ' + this.x);
    b();
    console.log('Method A after B: x = ' + this.x);
}
于 2012-12-22T02:56:33.613 に答える
2
  1. 理由は両方でthis.x変更されており、両方がオブジェクトを参照しているためです。abwindow

  2. あなたはこれについて誤解していると思います。this.x 呼び出し後に変更されていますb。呼び出しを逆にすると、これを確認できます。

    b(); // 2
    console.log('Method A : x = ' + this.x); // 2
    
于 2012-12-22T02:57:25.517 に答える
1

b()あなたのように呼び出すと、 (ブラウザ環境内で)グローバルオブジェクトthisを参照することになります。window

それはあなたの行動を説明します、あなたは基本的に書いていますwindow.x = 1;

于 2012-12-22T02:55:22.523 に答える
1

b()A の値が出力されるまで呼び出しませんでした。したがって、x の値は 1 で、b によって 2 に変更されました。

b()印刷する前に呼び出すとa()、出力は次のようになります

Method A : x = 2
Method B : x = 2

b()最初に値を変更してからログa()に記録します

これが機能です

var a = function A() { 
this.x = 1;
var b = function B () {
    this.x = 2;
    console.log('Method B : x = ' + this.x);
};
b();
    console.log('Method A : x = ' + this.x);

}

a と b はどちらも window オブジェクトを参照しますwindow.x

于 2012-12-22T02:59:09.783 に答える
0

thisは JavaScript の特別なキーワードであり、コンテキストに依存します。あなたの場合function B()、のコンテキストにありfunction A()ます。this.xしたがって、上書きしない場合はfunction B()、で割り当てた値になりますfunction A()

于 2012-12-22T02:59:42.900 に答える