-1

为什么下面代码末尾b 不等于null

var a = { property: "value" }, 
    b = a;
console.log(a === b); // true

a = null;
console.log(b); // Object { property: "value" }

我认为aandb是绑定到一个对象的两个引用,因此都将成为null.

4

1 回答 1

0

在行中:

a = 5;

您将“a”指向一个新的内存块,其中包含一个值为 5 的整数,覆盖它之前对您最初创建的对象的引用。试试这个:

var a = { property: "value" }, 
b = a;
console.log(a === b); // true

a.property = 5;
console.log(b); // Object {property: 5}

这样您就不会覆盖a,而是将键property指向的内存块从具有 value 的字符串更改为具有 value"value"的整数5

这保留a了对包含您最初创建的对象的内存块的引用,您还将 'b' 设置为指向下一行。

编辑:以上是为了回答你之前的问题。如果设置a为 null,它只会删除它对原始对象的引用。b当任何东西(在这种情况下)仍然具有对它的引用时,该对象不会被垃圾收集。创建后b,引用是独立的,但都恰好指向同一个内存块。

于 2016-07-15T16:11:55.443 回答