我得到一点强迫症,想要摆脱这个:
const idSet = new Set(ids)
当我只使用它将它作为参数传递给两个不同的函数时。
我希望能够只new Set(ids)
两次,每次为每个函数调用一次,但我不确定V8引擎(我在Node.js上运行代码)是否会优化这个。它只需要创建一个Set(也是我传递Set的函数,不要以任何方式修改Set)。
有人知道吗:
a)优化是否确实发生。 b)人们做了什么来检查它确实发生了(只是出于好奇)。
由于
修改
我在烦恼:
// I wanted to change something like this:
const idSet = new Set(ids)
const r1 = fn1(idSet)
const r2 = fn2(idSet)
// to this:
const r1 = fn1(new Set(ids))
const r2 = fn2(new Set(ids))
现在我想到了,可能还有一些高阶函数模式可以做这样的事情(或者我可以编写一个......但是这会破坏较少代码的最初目的):
const [r1, r2] = hof([fn1, fn2], new Set(ids))
更多理由:ids
是一个数组。我需要将它设为fn1
和fn2
的设置,但调用代码不需要它就是一个集合,我不想要一个额外的变量idSet
当我只在那里使用ids
时...但如果运行时创建了2个单独的集合......那就是浪费,所以它会停留。
答案 0 :(得分:1)
不,在V8中没有像hash consing那样实现。鉴于JS对象(包括Set
s)默认是可变的,这将是非常复杂的。
在您的情况下,只需实例化一次该集合并将其分配给两个不同的变量。或者甚至将它作为属性存储在ids
对象上,如果这是程序的两个部分共享的内容,而不共享范围。