javascript映射是否会造成内存泄漏?

javascript映射是否会造成内存泄漏?,javascript,arrays,Javascript,Arrays,我看到许多开发人员在.forEach()上使用.map()方法。 由于返回的数组没有被分配到引用,映射不创建未分配的内存吗 例如: let obj = {} a.map(item => { item.map((el, i) => { obj[el] = i }) }) 没有。可能只是写一个较短的名字“map”而不是“forEach” 没错,如果不需要返回的映射数组,最好使用forEach,它既不分配数组本身也不分配元素 无论如何,返回的数组都会被垃圾收集

我看到许多开发人员在.forEach()上使用.map()方法。 由于返回的数组没有被分配到引用,映射不创建未分配的内存吗

例如:

let obj = {}
a.map(item => {
    item.map((el, i) => {
      obj[el] = i
    })
})

没有。可能只是写一个较短的名字“map”而不是“forEach”

没错,如果不需要返回的映射数组,最好使用forEach,它既不分配数组本身也不分配元素


无论如何,返回的数组都会被垃圾收集器抓取,不会发生内存泄漏。

这样做是非常糟糕的做法-在
forEach
上简单地使用
map
是错误的
map
只应用于直接修改数组,而不是迭代数组。垃圾收集器进入并删除由
map
生成的未分配数组,并且不会发生内存泄漏。这段代码更好地表达为:

let obj = {}
a.forEach(item => {
    item.forEach((el, i) => {
      obj[el] = i
    });
});
甚至:

let obj = a.reduce((a, c) => ({ ...a, ...(c.reduce((A, C, i) => ({ ...A, [C]: i }))) }));

我没有看到任何优秀的开发人员这样做
map
不应被滥用为
forEach
,因为它会毫无理由地消耗内存,调用垃圾收集器和分配器,并且是非语义的。雪上加霜的是,这个例子打破了范围限制--
map
回调实际上不应该产生副作用或改变外部状态。它应该只以纯方式对当前元素执行一些操作,然后返回新元素——就是这样。不过,除非JS被破坏,否则内存不会泄漏。
map
forEach
是两件不同的事情——如果你看到有人为了迭代数组而使用
map
,那么他们就不正确地使用了它。当我看到
map
被这样滥用时,我会发疯
map
用于将数组转换为新数组,实际上只应与纯函数一起使用。如果您只是对每个数组元素执行一些副作用,那么应该使用
forEach
。谁负责垃圾收集?Node.js中的垃圾收集与Browser中的垃圾收集有什么区别吗?不太确定@user2734550,我真正知道的是,当对象没有对自身或子对象的引用时,它会从内存中释放。