我对这个参考情况的
JavaScript感到困惑.
我正在研究一个在对象方法中声明函数的代码. (原因是整理对象方法中的代码,同时保持函数对方法是私有的.)
以下是重新产生问题的实验.
我发现这个内部问候函数是指窗口范围而不是人范围.
- 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);
但是,我很想知道为什么默认情况下这会引用greeting方法中的窗口范围?
在此先感谢您的帮助.