Javascript 这里是什么(函数文字)

Javascript 这里是什么(函数文字),javascript,Javascript,我有下面的结构,我不太理解输出 var asker = { answer: "Its raining...", askQuestion: function(answered){ console.log("Opps..." + this.answer); answered(); } } //function literal var debunker = function(){ answer = "Its cloudy...";

我有下面的结构,我不太理解输出

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...

debunk.debunk
得到的答案是
“它是阴天的”
。但是,debunk函数中的
指的是
DOMWindow
,因此
此回答
如何在它指的是
窗口
对象时获得
其云状

原因是
回答
也是
窗口
对象的一个属性。如果定义时没有
var
关键字,它将附加到窗口。使用
var
关键字,它是定义它的函数的私有属性。

将介绍读入。在全局上下文中执行函数
answered()
。由于
answer
(在debunker构造函数中)不是私有变量,因此它将是全局
窗口
对象的属性。

answer
是全局变量,因为您没有使用
var
声明它。这将它置于
DOMWindow
的范围内


this
DOMWindow
,所以
是这个。答案是“它是阴天的”

除了这个问题,答案不是debunker的属性。另外,你的代码调用了一个名为“已回答”的函数,你没有发布任何这样的函数。@Pointy:检查
asker.askQuestion
函数的参数;)啊。。。今早咖啡不够:-)选择最佳答案,因为您添加了额外的参考链接以获取详细信息。