我感到困惑的一个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
是指窗口范围的问候方法里面?
在此先感谢您的帮助。