2

私は出力をよく理解していない以下の構造を持っています。

var asker = {
    answer: "Its raining...",
    askQuestion: function(answered){
        console.log("Opps..." + this.answer);
        answered();
    }
}

//function literal
var debunker = function(){

    answer = "Its cloudy...";

    debunk = function(){
        console.log(this); 
        console.log("No way! The real answer is:" + this.answer);
    };

    return {
        debunk: debunk
    };

}();

asker.askQuestion(debunker.debunk); 

これらの出力が得られます

Opps...Its raining...
DOMWindow
No way! The real answer is:Its cloudy...

はというdebunker.debunk答えを得ます'Its cloudy'。ただしthis、デバンク機能ではオブジェクトを参照するので、オブジェクトを参照している間はDOMWindowどうすれthis.answerば取得できますか?Its cloudywindow

4

3 に答える 3

6

その理由は、オブジェクトのプロパティでanswerあるためです。キーワードなしで定義すると、ウィンドウにアタッチされます。キーワードを使用すると、それが定義されている関数のプライベート プロパティになります。windowvarvar

于 2012-05-01T12:48:01.980 に答える
3

answerで宣言していないため、グローバル変数ですvar。それはそれを のスコープに入れDOMWindowます。

thisですDOMWindow、そうthis.answerです「曇りです」

于 2012-05-01T12:50:28.997 に答える
2

thisキーワードの紹介を読んでください。answered()グローバル コンテキストで関数を実行します。answer(debunker コンストラクターでは) はプライベート変数ではないため、グローバル オブジェクトのプロパティになりますwindow

于 2012-05-01T12:48:50.207 に答える