箭头函数this指向最近作用域中的this
普通函数this指向调用他的对象,
箭头函数this指向最近作用域中的this(如果最近作用域没有this再向外一层一层的找直到找到最近的this)
let obj = {
aaa(){
console.log(this)//flag1:obj.aaa()所以this->obj
setTimeout(function(){
console.log(this)//flag2:this->window
setTimeout(function(){
console.log(this);//this->window
})
setTimeout(()=>{
console.log(this)//箭头函数this指向最近的flag2处的所以this->window
})
})
setTimeout(()=>{
console.log(this)//箭头函数this指向最近的flag1处的所以this->obj
setTimeout(()=>{
console.log(this);//箭头函数this指向最近的flag1处的所以this->obj
})
})
}
}
obj.aaa()
如果 obj.aaa() 改成 let fn = obj.aaa; fn(),此时所有的this都指向window