JavaScript中map与filter方法内的const值是否会被重新计算?两种filter写法是否等价?
Hey,这两个问题问到点子上了,我来给你掰扯清楚:
问题1:在JavaScript的map和filter方法中,使用const定义的值会被重新计算吗?
答案是肯定的。map和filter的回调函数会在数组的每一次迭代中被单独调用一次,所以回调函数内部定义的const变量(比如你例子里的test数组),每处理一个元素就会被重新创建并初始化一次。简单说就是,迭代多少次,这个const的定义和赋值逻辑就会执行多少次。
问题2:两种filter写法是否等价?写法一会有额外开销吗?
咱们分两部分看:
- 功能等价性:这两种写法最终的过滤结果是完全一致的,都会把数组中属于
[1,2,3]的元素筛选出来,功能上没有任何区别。 - 性能开销差异:这里就有明显差距了。写法一里的
const test = [1,2,3]是放在回调函数内部的,意味着每迭代一次就会新建一个[1,2,3]数组实例,多了不必要的内存分配和初始化操作;而写法二把test定义在回调外面,整个filter过程中这个数组只会被创建一次,性能更优——如果你的数组元素数量很多,这个开销的差距会更显著。
额外提一句:如果test是固定不变的常量,优先选写法二,不仅能节省性能,代码可读性也更好,别人一眼就能看出来这个数组是复用的,不是每次迭代都要变化的。
内容的提问来源于stack exchange,提问作者Ian Bottomley
相关产品推荐
相关产品推荐

