###### tags: `JavaScript`
# this
## 默認綁定
``` javascript=
function girl(){
console.log(this)
}
girl()
```
:::spoiler
Windows
:::
## 隱式綁定
```javascript=
var girlName = {
name:"小紅",
callName(){
console.log(this.name)
}
}
girlName.callName()
```
:::spoiler
小紅
:::
## 硬綁定
```javascript=
var girlName = {
name: "小紅",
callName() {
console.log(this.name)
}
}
var girl1 = {
name: "小白"
}
girlName.callName.call(girl1)//小白
```
## 建構式綁定
```javascript=
function Lover(name){
this.name = name
this.callName=function(){
console.log(this.name)
}
}
var name = "小白"
var allen = new Lover('小紅')
allen.callName()
```
:::spoiler
小紅
:::
## 測試
```javascript=
function a() {
function b() {
console.log(this);
function c() {
"use strict";
console.log(this);
}
c();
}
b();
}
a();
```
:::spoiler
Window
undefined
:::
```javascript=
var name = "小白";
function special() {
console.log(this.name);
}
var girl = {
name: "小紅",
callName() {
console.log(this.name);
},
woman: {
name: "小黃",
callName() {
console.log(this.name);
},
},
special,
};
girl.callName();
girl.woman.callName();
girl.special();
```
:::spoiler
小紅
小黃
小紅
:::
```javascript=
var name = "小紅";
function a() {
var name = "小白";
console.log(this.name);
}
function d(i) {
return i();
}
var b = {
name: "小黃",
detail() {
console.log(this.name);
},
closure() {
return function () {
console.log(this.name);
};
},
};
var c = b.detail;
b.a = a;
var e = b.closure();
a();
c();
b.a();
d(b.detail);
e();
```
:::spoiler
小紅
小紅
小黃
小紅
小紅
:::
## 箭頭函式
```javascript=
var auntie = {
name: '阿姨',
callSomeone() {
console.log(this.name)
setTimeout(() => {
console.log(this.name)
}, 100);
}
}
auntie.callSomeone();
```