this 指向判断
分析不同调用方式下 this 的指向
问题
以下代码的输出是什么?
var name = 'window'
const obj = {
name: 'obj',
sayName: function() {
console.log(this.name)
},
}
obj.sayName()
const fn = obj.sayName
fn()
setTimeout(obj.sayName, 0)
setTimeout(() => obj.sayName(), 0)
解答
输出结果依次为:
obj
window
window
obj
分析:
obj.sayName() - 对象方法调用,this 指向 obj,输出 obj
fn() - 普通函数调用,this 指向全局对象(非严格模式),输出 window
setTimeout(obj.sayName, 0) - 函数作为参数传递后独立调用,this 指向全局对象,输出 window
setTimeout(() => obj.sayName(), 0) - 箭头函数内部调用 obj.sayName(),仍是对象方法调用,输出 obj
关键点
- 对象方法调用时,this 指向该对象
- 函数赋值给变量后独立调用,this 指向全局对象
- 函数作为回调传递时会丢失 this 绑定
- 箭头函数包裹可以保持正确的调用方式
目录