这是什么(函数文字)

时间:2012-05-01 12:44:49

标签: javascript

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

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如何获得它?

3 个答案:

答案 0 :(得分:6)

原因是因为answer 也是 window对象的属性。如果在没有var关键字的情况下定义,它将附加到窗口。使用var关键字,它是定义它的函数的私有属性。

答案 1 :(得分:3)

answer是一个全局变量,因为您没有使用var声明它。这使其处于DOMWindow

的范围内

thisDOMWindow,因此this.answer是“它是阴天”

答案 2 :(得分:2)

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