项目场景:
提示:这里简述项目相关背景:
setTimeout里的this具体指向?
在JavaScript中,this关键字的值取决于函数的调用方式,而不是定义方式。在setTimeout的回调函数中,this通常指向全局对象(在浏览器上下文中,即window对象)。这是因为当你将一个函数作为参数传给setTimeout时,该函数将在全局作用域中被调用,所以this被设置为全局对象。
setTimeout(function() {
console.log(this); //输出:Window {...}
}, 1000);
这在一些情况下可能会导致问题,特别是你希望this指向其他值。为了维持this的上下文,你可以用Function.prototype.bind方法、箭头函数等方式来改变this指向:
使用bind方法:
let obj = {
test: function() {
console.log(this); // 输出:obj
}
};
setTimeout(obj.test.bind(obj), 1000);
使用箭头函数:
let obj = {
test: function() {
console.log(this); // 输出:obj
}
};
setTimeout(() => obj.test(), 1000);
在以上两种情况下,我们都通过技巧使得setTimeout内的this指向了我们期望的obj对象。