gpt4 book ai didi

javascript - 为什么我的全局变量在 JSFiddle 上被覆盖了?

转载 作者:行者123 更新时间:2023-11-30 09:46:23 24 4
gpt4 key购买 nike

var name = "Window Object";

var a = {
name: 'manish',
getName: function() {
return this.name;
}
}

b = (a.getName = a.getName)();

console.log(b, window);

上面是我在 JSFiddle 上写的代码。

这是链接:https://jsfiddle.net/shettyrahul8june/o49jn5fm/

变量 b 返回结果 而不是窗口对象。我看到在 Window 对象中有一个名为 name 的属性,它的结果存储为字符串。但我不确定为什么我的全局变量 a 没有覆盖该变量。感谢期待。

编辑: 伙计们,我认为我的问题不清楚。我知道它引用了 JSFiddle 中的窗口对象的名称。但我也写过var name = "Window Object"

为什么我的变量名没有覆盖 Window 对象名,因为我认为即使是我声明的 var 名也应该附加到 window 对象上。是不是因为, fiddle 有一个包装器对象,其中的名称被分配为

JSFiddleWrapper = { 名称:“窗口对象”

因此它引用了 window.name?

最佳答案

当你在做 a.getName = a.getName 的时候有一些有趣的事情。 a.getName 函数被重新分配给相同的 .括号仅返回以 Window 作为上下文的函数。因此,当您在函数内部执行 this 时,它指的是 Window 对象。

var name = "Window Object";

var a = {
name: 'manish',
getName: function() {
return this.name;
}
}

b = (a.getName = a.getName)();

console.log(b);

您可以使用bind 来改变上下文。检查以下代码段:

var name = "Window Object";

var a = {
name: 'manish',
getName: function() {
return this.name;
}
}

b = (a.getName = a.getName).bind(a)();

console.log(b);

关于javascript - 为什么我的全局变量在 JSFiddle 上被覆盖了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38772311/

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