gpt4 book ai didi

javascript - 在 JavaScript 中,为什么不存在的 "window"属性值在这两种情况下不同?

转载 作者:行者123 更新时间:2023-12-02 20:57:02 27 4
gpt4 key购买 nike

我有一段 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);

据我了解,属性名称应该不太重要。如果我将对象 o 的属性 name 的名称更改为类似 a 的名称,我应该得到相同的结果。然而,这种情况并非如此。见下图。我在 FireFox 75.0 上运行代码。谁能解释一下这里发生了什么?

最佳答案

问题不在于对象中的o属性 - 那里的属性名称实际上完全不相关,因为你当您将函数分配给独立变量时丢失调用上下文:

var m1 = o.f;
m1();

上面的代码意味着在没有调用上下文的情况下调用m1,这意味着m1函数内的this将是全局函数对象(在草率模式下),或未定义(在严格模式下)。

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

这是演示同一类型问题的另一个片段:

var foo = 'foo';
var o = {
f: function () {
console.log(this.foo);
}
};

var m1 = o.f;
m1();

foo 是窗口的一个属性,因为名为 foo 的全局变量是用 var 声明的,所以 this.foo 引用 window.foo

关于javascript - 在 JavaScript 中,为什么不存在的 "window"属性值在这两种情况下不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61451881/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com