为什么在这个有趣的Javascript代码片段中将U变量设置为NULL?

jeb*_*cky 1 javascript

我有一个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

Dan*_*llo 6

变量实际上并不包含对象,而只是持有对象的引用.通过分配unull,你下探,参考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开始引用同一个对象.设置xnull简单地删除x保持对象的引用,使实际对象不受影响.如果我们要设置ynull,或者别的,垃圾收集器将最终拿起破坏的对象.