我有下面的结构,我不太了解输出。
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'
的答案。但是,debunk函数中的this
引用了DOMWindow
,那么this.answer
在引用Its cloudy
对象时window
如何获得它?
答案 0 :(得分:6)
原因是因为answer
也是 window
对象的属性。如果在没有var
关键字的情况下定义,它将附加到窗口。使用var
关键字,它是定义它的函数的私有属性。
答案 1 :(得分:3)
answer
是一个全局变量,因为您没有使用var
声明它。这使其处于DOMWindow
。
this
是DOMWindow
,因此this.answer
是“它是阴天”
答案 2 :(得分:2)
阅读this
keyword的简介。您在全局上下文中执行函数answered()
。由于answer
(在你的debunker构造函数中)不是私有变量,它将是全局window
对象的属性。