長さのコメントではなく、これを回答にする必要がありました。
OK -- まず用語の説明:
タイマーで実行されている場合、再帰的ではありません。しかし、それはよくある誤解です。
これは再帰的なコードであり、関数はそれ自体を呼び出します。元の関数呼び出しは、全体が最終的に巻き戻され、元の呼び出し元に値が返されるまでスタックに残ります。タイムアウトを使用する場合、関数の各反復は個別の実行コンテキストにあります。
再帰関数の例 function factorial(n) { if (n == 1) { return 1; } else { return n * factorial(n-1); } }
これは/再帰的ではありません: function annoy() { window.setTimeout(annoy, 1000); window.alert("これは毎秒イライラします!"); }
「迷惑」の各反復は完全に独立しており、独立しています。別のインスタンスが呼び出されるようにタイマーを設定するだけです。スタック上に「煩わしい」関数の山はなく、呼び出し元に何も返すことはできません。
第二に、私があなたに与えた例では、変数a
は範囲外にはなりませんが、a
参照する古いオブジェクトにはアクティブな参照がなかったので、自由に解放されます。変数が指すものはさまざまです。
var a, b;
a = {};
b = a; // This object now has TWO references using it.
b = null; // The object now has one reference
a = null; // Object has no references and is free for release.
この時点で、私にできる最善のことは、次のことを示すことです。
http://www.ibm.com/developerworks/web/library/wa-sieve/