2017-01-17 4 views
0

Хотелось бы, чтобы я мог подумать о лучшем вопросе для моей ситуации.Функция Javascript, связывающая возможную утечку памяти?

Позвольте мне привести контекст в коде.

У меня есть эта общая функция, предназначенная для связывания с различными вариантами (всего около 3 или 4 случая).

GeneralFunction = function(helper, paramA, paramB) { 
 
    if (paramA == "hello") { 
 
     return helper(paramA); 
 
    } 
 
    return paramB; 
 

 
}

Тогда я эту функцию, чтобы вернуть определенную вариацию общей функции.

function getFlavorX() { 
 
    return GeneralFunction.bind(undefined, helperX); 
 
}

Меня беспокоит то, что getFlavorX() можно назвать много-много раз (тысячи), и в соответствии с documentation of bind, кажется, каждый вызов bind создает новую функцию. Даже для того же самого helperX?

Итак, я думаю, что я являюсь своего рода утечкой объектов функции?

+1

Сделайте свой код более умным, чтобы НЕ создать новую функцию, которая привязывается к helperX, если у вас уже есть функция, которая привязывается к helperX: p –

+1

Да, 'bind' действительно создает новые функциональные объекты, но являются ли они утечками или немедленно мусор -collected зависит от остальной части вашего кода. У вас есть какие-либо проблемы с производительностью? – Bergi

+0

@JaromandaX Спасибо! Как только я подумал об этой проблеме с утечкой памяти, я изменил свой код, чтобы сделать именно это. Наверное, мне интересно, является ли это законной проблемой или нет ... Что делать, если Javascript может просто автоматически мусор собирать такие вещи? –

ответ

0

Я думаю, что проблема актуальна, но утечка памяти или нет, зависит от остальной части кода. Так как в моем случае изменения привязки очень ограничены, я вручную поддерживаю список объектов функций привязок (я возвращаю уже привязанный объект функции, а не позволяю кодам пользователя вызывать bind при каждом вызове).