JavaScript的这指的是窗口,而不是内部函数对象(JavaScript this refers

2019-08-19 18:51发布

我感到困惑的一个JavaScript this基准状况。

我的工作,我宣布一个对象方法中的功能代码。 (其理由是整理代码的对象方法的内部,同时保持私有的方法的功能。)

下面是一个实验,以重新产生了我的问题。

我发现this里面greeting功能是指窗口范围,而不是人的范围。

var person = {
    nickname: "Makzan",
    sayHi: function() {
        console.log(this);
        var greeting = function() {
            console.log(this);
            return "Aloha " + this.nickname;
        }
        console.log(greeting());
    }
}
person.sayHi();

(在相同的jsfiddle代码: http://jsfiddle.net/makzan/z5Zmm/ )

这是在浏览器中的日志结果:

> Object
> Window
Aloha undefined 

在JS,我知道, 是参考棘手。 我可以通过更改范围.call方法,使这个代码工作。

var greeting = (function() {
    console.log(this);
    return "Aloha " + this.nickname;
}).call(this);

不过,我很好奇,知道为什么默认情况下, this是指窗口范围的问候方法里面?

在此先感谢您的帮助。

Answer 1:

this无关与范围 。 它是由上下文决定。

greeting()调用没有上下文的功能,所以this是默认的对象( window在浏览器中)。



Answer 2:

this ,引用是没有关系的范围,它取决于调用上下文。

按照该MDN文档 ,

一般地,在当前范围绑定到该对象由当前功能如何被调用来确定



Answer 3:

尝试person.nickname,这指的是VAR问候你的情况



文章来源: JavaScript this refers to window instead of object inside function