2017-01-17 13 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を呼び出させるのではなく、すでにバインドされた関数オブジェクトを返します)。

関連する問題