setTimeout()中回调函数中的this
如果被setTimeout推迟执行的回调函数是某个对象的方法,那么该方法中的this关键字将指向全局环境,而不是定义时所在的那个对象。
let num = 1;
let obj = {
num: 2,
func: function () {
console.log(this.num);
}
}
setTimeout(obj.func, 1000); // 1
为了防止出现这个问题,一种解决方法是将 obj.func 放在匿名函数中执行。
setTimeout(function() {
obj.func();
}, 1000);
另一种解决方法是,使用bind方法,将绑定 obj.func 绑定在user上面。
setTimeout(obj.func.bind(obj), 1000);