此问题来自ECMA-262测验
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
上下文如何变化?或者一般来说,哪个对象等于(赋值)操作会返回全局对象?
答案 0 :(得分:3)
foo.bar
(一个member operator)评估对象上的Reference“属性”栏“,当{ {3}}
(foo.bar = foo.bar)
(一个calling it)只生成指定的值,调用它将导致全局对象被用作assignment。
答案 1 :(得分:2)
foo.bar = foo.bar
返回函数foo.bar
,然后通过(...)()
调用该函数。由于该函数未作为对象foo的属性调用,因此其this
将不是foo对象,而是在本例中为全局对象。