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.getNamea.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/

10-11 22:30
查看更多