You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用箭头函数实现setTimeout递归并正确绑定类实例this指向

问题根因

你使用普通函数作为setTimeout回调时,类内部默认是严格模式,普通函数独立调用时this会指向undefined,因此无法正常访问类的currentIndex属性。
箭头函数的this是继承自外层作用域的,刚好符合你访问类属性的需求,但匿名箭头函数没有函数名可以直接自引用实现递归,需要先把箭头函数赋值给一个变量。

正确实现代码

public currentIndex: number = 0;

// 先将箭头函数赋值给变量run
const run = () => {
    this.currentIndex++;
    console.log(this.currentIndex) // 可以正常获取到类的currentIndex值
    setTimeout(run, 1000) // ??位置直接填变量名run即可
}
// 首次触发定时器
setTimeout(run, 1000)

其他可选方案

如果你不想额外声明变量,也可以用普通命名函数绑定this的方式实现,效果完全一致:

public currentIndex: number = 0;

setTimeout(function run() {
    this.currentIndex++;
    console.log(this.currentIndex);
    setTimeout(run.bind(this), 1000);
}.bind(this), 1000)

注意事项

如果后续需要停止这个递归定时器,记得保存每次的timeoutId,在需要停止的时候调用clearTimeout清除即可,避免内存泄漏。

内容的提问来源于stack exchange,提问作者Fab83i

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:06:09