JavaScript这是指窗口而不是函数内的对象

前端之家收集整理的这篇文章主要介绍了JavaScript这是指窗口而不是函数内的对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对这个参考情况的 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方法中的窗口范围?

在此先感谢您的帮助.

解决方法

这与范围无关.它由上下文决定.

greeting()调用没有上下文的函数,因此这是默认对象(浏览器中的窗口).

原文链接:https://www.f2er.com/js/159378.html

猜你在找的JavaScript相关文章