(function() {
//create object with two initail properties
var obj = {};
obj.a = { a1: 1, a2: 2 };
obj.b = { b1: 1, b2: 2 };
//create a new property 'c' and refer property 'a' to it
obj.c = obj.a;
//cyclic reference
obj.a = obj.b;
obj.b = obj.a;
//this function removes a property from the object
// and display all the three properties on console, before and after.
window.showremoveshow = function() {
console.log(obj.a, '-----------a');
console.log(obj.b, '-----------b');
console.log(obj.c, '-----------c');
//delete proprty 'a'
delete obj.a;
//comes undefined
console.log(obj.a, '-----------a');
//displays b
console.log(obj.b, '-----------b');
//still displays the initial value obj.a
console.log(obj.c, '-----------c');
}
})();
では今:obj.aを削除しobj.cの値をチェックした後、我々は obj.cがまだ存在するのdoesntしかし自体obj.a、obj.aの初期値を参照することがわかります。これはメモリリークですか? obj.aは削除され、その初期値はまだ存在します。このメモリリークはありますか? JavaScriptの
編集:これは、プロパティ(obj.a)を削除したようなことですが、その値は後でも存在します。 obj.cで見ることができる。
リークではありません。オブジェクトは変数に「生きていません」、javascriptのオブジェクトはすべて参照オブジェクトです。オブジェクトは参照がある限り、最後の参照が終了するとガベージコレクションされます。 –