4

この質問は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

2番目のステートメントでコンテキストはどのようにthis変化しますか?consoleまたは、一般的に、どのオブジェクトが(割り当て)操作に等しいかは、グローバルオブジェクトを返しますか?

4

2 に答える 2

3

foo.barメンバー演算子)は、参照オブジェクトのプロパティ「バー」」を評価します。これは、呼び出すときに特別に扱われます。

(foo.bar = foo.bar)割り当て)は割り当てられた値を生成するだけであり、それを呼び出すと、グローバルオブジェクトがとして使用されthisます。

于 2013-01-29T19:04:49.283 に答える
2

foo.bar = foo.barfoo.barは、を介して呼び出される関数を返します(...)()。関数はオブジェクト foo のプロパティとして呼び出されていないため、thisこれは foo オブジェクトではなく、この場合はグローバル オブジェクトになります。

于 2013-01-29T19:00:11.130 に答える