创建副本后数组会发生什么?

时间:2015-05-12 12:50:52

标签: javascript arrays

例如,当您在下划线中使用函数时,原始数组会发生什么,并返回'数组的副本'?

在清除浏览器缓存(假设没有永久会话)之前,它是否会留在内存中

创建副本时是否有任何良好的javascript“最佳实践”方法。我想了解副本是否引用原文,换句话说,是否需要保留原文?

出于上下文使用underscore _.without

without_.without(array, *values) 

Returns a copy of the array with all instances of the values removed.

_.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
=> [2, 3, 4]

1 个答案:

答案 0 :(得分:2)

与C / C ++不同,Javascript为程序员进行内存管理。因此,程序无法以任何方式达到的所有变量(例如,作为_.without的参数传递的数组)将{strong>最终由Garbage collector收集。收集发生的确切时刻取决于Javascript引擎的底层实现,例如V8(Chrome)可能与SpiderMonkey(Firefox)不同。

有关详细信息,请参阅the MDN article about memory management

至于这是否是一个好主意取决于您的应用程序的性能有多重要。对于大多数应用来说,它并没有太大的区别。就个人而言,我更喜欢在破坏性更新中创建对象副本,以此来获取不变性,从而使我更容易推理我的程序。

但是,如果您正在编写执行计算成本高昂任务的库,那么避免复制和更新内存中的对象可能会为您提供更好的性能。

让基准(不是microbenchmark, though)最终作出决定。