过滤数据时使用let存储percentage值是否会导致长期运行问题?
结论
仅就你当前提供的代码逻辑来看,使用let声明percentage不会在长期运行中产生内存泄漏或者逻辑异常类的问题。
相关说明
let和const的核心差异仅为是否允许重新赋值:如果你后续没有重新给percentage赋值的需求,换成const是更符合JS最佳实践的写法,但即使保留let也不会引发运行问题。- 只要你没有把这段声明逻辑放到循环/定时器中重复执行
let percentage的声明操作(重复声明同一变量会直接报语法错误,上线前就能发现),就不会出现变量堆积、内存泄漏的问题,变量在所在作用域销毁后会自动被JS垃圾回收机制清理。
你更需要注意的潜在问题
相比用let还是const,以下两个点对你后续应用到图表的影响更大:
- 数据类型问题:
toFixed()方法返回的是字符串类型,而绝大多数图表库接收的数值参数要求是数字类型,直接传入字符串可能会导致图表渲染异常,建议调整计算逻辑直接得到数字:
// 写法1:toFixed后转数字 let percentage = Number(((items2.length / total) * 100).toFixed(2)); // 写法2:用Math.round实现相同精度,无需类型转换 let percentage = Math.round((items2.length / total) * 10000) / 100;
- 除以0异常:如果
filteredUsers为空导致total为0时,计算会得到NaN,建议添加兜底判断:
let percentage = total === 0 ? 0 : Math.round((items2.length / total) * 10000) / 100;
内容的提问来源于stack exchange,提问作者JS3
相关产品推荐
相关产品推荐

