2017-02-16 9 views
0

Я получаю немного OCD и хочу, чтобы избавиться от этого:Есть ли повторяющаяся оптимизация объявлений в Javascript?

const idSet = new Set(ids) 

, когда я только использовать его, чтобы передать его в двух различных функции в качестве параметра.

Я хочу, чтобы иметь возможность всего new Set(ids) дважды, один раз для каждого вызова функции, но я не уверен, будет ли этот движок V8 (я запускаю код на Node.js). Ему нужно только создать один Set (также функции, через которые я передаю Set, чтобы не изменять Set в любом случае).

Кто-нибудь знает:

а) ли оптимизация случается. б) что люди делают, чтобы проверить, что это действительно происходит (просто из любопытства).

Благодаря

Edit:

Что я возился над:

// 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 ... но если runtime создает 2 отдельных набора ... это отходы, поэтому он остается.

+0

Я не понимаю. Почему вы хотите создать два набора, но хотите создать только один набор? – Bergi

+1

Я вижу. Не бойтесь локальных переменных, они дешевы и помогают с ясностью :-) Если это глобальная область, используйте IIFE: 'const [r1, r2] = (idSet => [fn1 (idSet), fn2 (idSet)]) (новый Set (ids)); ' – Bergi

ответ

1

Нет, ничего подобного hash consing не используется в V8. Это было бы довольно сложно, учитывая, что объекты JS (включая Set s) по умолчанию изменяются.

В вашем случае просто создайте экземпляр только один раз и назначьте его двум переменным. Или даже сохраните его как право собственности на объекте ids, если это то, что разделяют две части вашей программы, без совместного использования области.