在JavaScript中,为什么在这两种情况下不存在的“窗口”属性值不同?

问题描述 投票:0回答:1

我有一段JavaScript代码:

var o = {
    name: "aaaa",
    f: function () {
        console.log(this);
        console.log(this.name);
    }
};

var m1 = o.f;
m1();

console.log(window.non_existent_property);

据我所知,属性名称不应有太大关系。如果到处都将对象name的属性o的名称更改为类似a的名称,则我应该得到相同的结果。然而,这种情况并非如此。见下图。我正在FireFox 75.0上运行代码。有人可以解释一下这里发生了什么吗?

javascript properties global
1个回答
0
投票

问题与objecto的属性无关-属性名称实际上是完全无关,因为将函数分配给独立对象时会丢失调用上下文变量:

var m1 = o.f;
m1();

上面的代码表示在没有调用上下文的情况下调用了m1,这意味着this函数内部的m1将成为全局对象(在草率模式下)或undefined(在严格模式下) 。

由于处于草率模式,所以this.name引用window.name,它是reserved property,始终存在于window上,并且必须始终为字符串。它默认为空字符串。

© www.soinside.com 2019 - 2024. All rights reserved.