我对 JavaScriptthis
参考情况感到困惑。
我正在编写在对象方法中声明函数的代码。(原因是整理对象方法中的代码,同时保持方法私有的函数。)
以下是重现我的问题的实验。
我发现this
insidegreeting
函数是指窗口范围而不是人员范围。
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
方法中引用窗口范围?
提前感谢您的所有帮助。