Javascript中是否存在重复的声明优化?

时间:2017-02-16 14:30:57

标签: javascript node.js optimization

我得到一点强迫症,想要摆脱这个:

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是一个数组。我需要将它设为fn1fn2的设置,但调用代码不需要它就是一个集合,我不想要一个额外的变量idSet当我只在那里使用ids时...但如果运行时创建了2个单独的集合......那就是浪费,所以它会停留。

1 个答案:

答案 0 :(得分:1)

不,在V8中没有像hash consing那样实现。鉴于JS对象(包括Set s)默认是可变的,这将是非常复杂的。

在您的情况下,只需实例化一次该集合并将其分配给两个不同的变量。或者甚至将它作为属性存储在ids对象上,如果这是程序的两个部分共享的内容,而不共享范围。