泥棒マスターはあなたの質問にかなり答えました。はい、このコードは、配列に含まれるクロージャの数に応じて、ますます多くのメモリを使用します。最近のほとんどのエンジンは、変数に割り当てられた関数への参照と、クロージャー変数を含むMyFunct
特定の「呼び出しオブジェクト」を割り当てると言わなければなりません。言い換えると、配列は次のようになります。
myFuncArray[0] = {call:
{myPoint:'Whatever value was passed to the addValues function the first time'},
valueOf: myFunct};
//the actual value is a reference to myFunct
//JS provides an implicit link to the call property, which is bound to this particular reference
myFuncArray[1] = {call:
{myPoint:'The value passed to addValues the second time'},
valueOf: myFunct};
オブジェクト自体にアクセスすることはできませんが、これはJSがどのように物事をメモリ内に整理しておくかを考える方法にすぎません。
トピックから少し外れていますが、MyFunct
変数を使用して暗黙のグローバルを作成しています。
function addValues(myPoint)
{
var anotherClosureVar = 'This will be accessible, too: it\'s part of the closure';
var myFunct = function()
{//use var to declare in addValues scope, instead of using an implied global
var myVar="Line " + myPoint;
console.log(myVar);
console.log(anotherClosureVar);//will work, too
};
myFunctArray.push(myFunct);
}
全体として、これがコードである場合、メモリはそれほど大きな問題にはならないはずです。このコードが古いJScriptエンジンで実行されたとしても、意味のある量のメモリを使い果たすまでには少し時間がかかります。
それでも、このようなことを考えるのは良い習慣です。私はここで理にかなっていると思います。私はネイティブスピーカーではないため、JSのより抽象的な側面を説明するのはやや難しいです。