gpt4 book ai didi

javascript - 为什么对同一函数调用 window.setTimeout 不会引入无限循环?

转载 作者:行者123 更新时间:2023-12-03 06:11:22 25 4
gpt4 key购买 nike

我看到了以下代码:

class MasterControlPanel {
private sensors: Sensor[] = [];
constructor() {
// Instantiating the delegate HeatSensor
this.sensors.push(new HeatSensor(this));
}

start() {
for (var i= 0; i < this.sensors.length; i++) {
// Calling the delegate
this.sensors[i].check();
}
window.setTimeout(() => this.start(), 1000);
}

startAlarm(message: string) {
console.log('Alarm! ' + message);
}
}

var cp = new MasterControlPanel();
cp.start();

为什么window.setTimeout(() => this.start(), 1000);不会引入无限循环?

根据我的理解,cp.start()将首先迭代sensors内的每个sensor,然后调用window。 setTimeout 又在 1 秒延迟后再次调用 start

引用: list 3-3。 Pro TypeScript 中的委派:应用程序规模的 JavaScript 开发

最佳答案

简而言之,它不会引入无限循环,因为 setTimeout 不会阻塞。相反,您为其执行的函数 () => this.start() 会添加到队列中,并在 1 秒后执行。 start 方法在调用 window.setTimeout 后返回,因此不会导致命令式意义上的无限循环。大多数时候,代码会处于等待状态,直到下一个定时器到来。

代码无限地调度计时器来调用 start 方法也是如此,但它不是无限循环,因为它将控制权返回给 javascript 运行时。

关于javascript - 为什么对同一函数调用 window.setTimeout 不会引入无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39300551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com