我正在阅读the events chapter in Eloquent javascript,我遇到了以下代码。应该每隔250ms显示用户鼠标的坐标。
StringBuilder stringBuilder = new StringBuilder(downloadedImage);
while ((resp = rd.readLine()) != null) {
stringBuilder.append(resp);
}
downloadedImage = stringBuilder.toString();
我不了解调度是如何工作的。我知道如果你设置一个timeOut,处理程序将在设定的时间段后运行,但我不明白为什么在这个例子中存在一个预定变量和一个条件语句来检查它的布尔值。
如果没有变量和if语句,程序不能按预期工作,它将打印坐标而没有任何延迟。 这背后的逻辑是什么?
答案 0 :(得分:2)
scheduled
标志的目的是阻止在每个mousemove
事件调用上创建计时器。只有在当前setTimeout
完成且标志为false后,才会创建新的setTimeout
。
如果没有该标志,对displayCoords
的第一次调用将在250ms之后发生,但是对displayCoords
的后续调用将一个接一个地被触发,因为每个mousemove
生成一个定时器,没有等待前一个结束。