4

这个问题来自ECMA-262 quiz

var x = 100;
var foo = {
  x: 50,
  bar: function(){
    return this.x;
  }
}
console.log(foo.bar()); //returns 50
console.log((foo.bar = foo.bar)()); //returns 100

第二个语句中的上下文如何this变化?console或者一般来说,什么对象等于(分配)操作返回全局对象?

4

2 回答 2

3

foo.bar成员运算符)评估为引用对象上的属性”bar“ ,并且在调用它时将被特殊对待。

(foo.bar = foo.bar)赋值)只产生赋值,调用它会导致全局对象被用作this.

于 2013-01-29T19:04:49.283 回答
2

foo.bar = foo.bar返回foo.bar然后通过调用的函数(...)()。由于该函数不是作为对象 foo 的属性调用的,因此它this不会是 foo 对象,而是在这种情况下是全局对象。

于 2013-01-29T19:00:11.130 回答