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);
本文探讨了在JavaScript中使用setTimeout时遇到的this指向问题。当作为对象方法的回调函数被setTimeout调用时,this不再指向该对象而是指向全局环境。文章提供了两种解决方案:一是将回调函数包裹在匿名函数中调用;二是利用bind方法将回调函数绑定到正确的对象上。
3580

被折叠的 条评论
为什么被折叠?



