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对象上。是因为,小提琴有一个包装器对象,在其中分配了名称,例如
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/