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,在 debunk 函数中引用了对象,DOMWindow那么如何this.answer获取Its cloudy它所引用的window对象呢?

4

3 回答 3

6

原因是因为answer也是对象属性window。当没有var关键字定义时,它会附加到窗口。使用var关键字,它是定义它的函数的私有属性。

于 2012-05-01T12:48:01.980 回答
3

answer是一个全局变量,因为你没有用var. 这将其置于DOMWindow.

thisDOMWindow,所以this.answer是“多云”

于 2012-05-01T12:50:28.997 回答
2

读入this关键字的介绍。answered()您在全局上下文中执行该函数。由于answer(在您的 debunker 构造函数中)不是私有变量,它将是全局window对象的属性。

于 2012-05-01T12:48:50.207 回答