2015-05-12 37 views
1

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

是否留在内存中,直到浏览器缓存被清除(假定没有永远的会议)

是否有创建副本时,遵循任何好的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] 

回答

2

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

有关更多详细信息,请参见the MDN article about memory management


至于这是不是一个好主意取决于性能对你的应用有多重要。对于大多数应用程序,它没有太大的区别。就个人而言,我更喜欢通过破坏性更新来创建对象的副本,以此获得不变性,从而使我更容易推理我的程序。但是,如果您正在编写执行计算量大的任务的库,那么避免在内存中复制和更新对象可能会使您获得更好的性能。

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

+0

感谢您的详细回复,并指向我进一步阅读。这很有帮助 – meteorBuzz

相关问题