我有一个javascript代码片段作为
var u = {};
var x = y = z = {"cvalue":"cell", "call":function(){alert(this.cvalue);}};
(function(){u=x;/*change all cvalue in x,y, z, u*/ u.cvalue = "notcell";})();
if(u == x && x == y && y == z && z == u){
u.call();
}
//only u goes to null
u = null;
//x,y,z stay same
alert(x.cvalue);
Run Code Online (Sandbox Code Playgroud)
想知道为什么u = null只适用于u?
变量实际上并不包含对象,而只是持有对象的引用.通过分配u至null,你下探,参考u了对象.
一个更基本的例子:
var x = { 'name': 'Bob' };
var y = x;
console.log(x); // Object { name="Bob"}
console.log(y); // Object { name="Bob"}
y.name = 'Jack';
console.log(x); // Object { name="Jack"}
console.log(y); // Object { name="Jack"}
x = null;
console.log(x); // null
console.log(y); // Object { name="Jack"}
Run Code Online (Sandbox Code Playgroud)
请注意我们的对象是如何保留的x.它存在于记忆中的某个地方,并x指的是它.当我们这样做时y = x,我们将引用复制到y,因此y开始引用同一个对象.设置x为null简单地删除x保持对象的引用,使实际对象不受影响.如果我们要设置y到null,或者别的,垃圾收集器将最终拿起破坏的对象.
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |