#### This
```javascript=
var x = 10;
const Andy = {
x: 20,
foo: function () {
console.log(this.x);
},
bar: () => console.log(this.x),
far: function () {
(() => console.log(this.x))();
}
};
const Mary = {
x: 30
};
Andy.foo(); // 20
Andy.bar(); //10
Andy.far(); //20
Andy.foo.call(Mary); //30
Andy.bar.call(Mary); //10
Andy.far.call(Mary); //30
const Ken = Andy.far;
Ken(); //10
```
:::info
1. foo
一般函式宣告,
this 應指向呼叫函式的物件,
20行 **(Andy 呼叫)**,
26行 **(綁定 Mary 呼叫)**
這兩行程式碼的值 分別為 [20,30]
2. bar
arrow function 的 this 應指向定義時作用域指向的物件, bar 定義時作用域物件始終是 window
因此,
22行,
28行
這兩行程式碼的值分別為 [10,10]
3. far
應該與第1點一樣,
因此,
24行 **(Andy 呼叫指向 Andy)**,
30行 **(綁定 Mary 呼叫)**,
35行 **(無綁定其它物件因此指向 window)**
這三行程式碼的值 分別為 [20,30,10]
:::