在以下代码的递归过程中,范围如何变化?
具体而言,第一次调用_action()
,直观地运作并维护对this._updateRateMilliseconds
和this._updateAction
的引用。但是,在通过递归的第二次输入期间,它们会丢失。
代码使用以下更改:
setTimeout(this._action, this._updateRateMilliseconds);
- > setTimeout(this._action.bind(this), this._updateRateMilliseconds)
。
有人可以解释在递归过程中范围如何变化以及为什么我需要混淆,至少对我而言this._action.bind(this)
?
export class UpdateTimer {
constructor(updateRateMilliseconds, updateAction) {
this._updateRateMilliseconds = updateRateMilliseconds;
this._updateAction = updateAction;
this._stopUpdates = true;
}
_action() {
if (this._stopUpdates) return;
this._updateAction();
setTimeout(this._action, this._updateRateMilliseconds);
}
Stop() {
this._stopUpdates = true;
}
Start() {
this._stopUpdates = false;
this._action();
}
}