/**
* 描述
* 实现一个打点计时器,要求
* 1、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1
* 2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
* 3、第一个数需要立即输出
* @param start
* @param end
*/
function count(start, end) {
// 立即输出第一个数字
console.log(start);
// 定义一个变量来存储 setTimeout 返回的 id,以便之后取消定时器
let timeoutId;
// 修改为从 start + 1 开始,因为 start 已经被输出了
for (let i = start + 1; i <= end; i++) {
// 使用闭包来保持每次循环的 i 值
// 注意这里使用了 let 来声明 timeoutId,确保每次循环都有自己的 timeoutId
timeoutId = setTimeout((currentValue) => {
console.log(currentValue);
}, (i - start) * 100, i);
}
// 返回一个对象,包含一个 cancel 方法用于停止定时器
return {
cancel: function() {
clearTimeout(timeoutId);
}
};
}
// 使用示例
const timer = count(2, 4);
// 调用 cancel 方法停止定时器
// timer.cancel();