var a=new Object()
a.name = "Nicholas";
console.log(a.name)
var a = new Object(); a.name = "Greg";
console.log(a.name)
在js中对象创建是被分配再内存的不同区域,那样的话创建两个同名的对象,给予不同的值我去调用.name的时候应该会取到哪个值?
问题1:实验结果显示是最后创建的Greg这里面的逻辑是怎么样的呢?
问题2:能否读取到第一次创建的a.name = "Nicholas";呢?
这段代码在执行的时候与下面代码等价
要点在于
var
不会重复声明,引擎在解析到var
的时候会寻找当前作用域是否有同名变量,如果有就不会重复创建变量。因此你代码中的操作都是在对a
和a.name
赋值而已;由于后面的赋值会覆盖前面的,因此最后打印的结果是Greg
对于第二个问题,对象是引用类型,赋值时传递的是内存地址,因此在垃圾回收算法执行之前,第一个
new Object
是会存在于内存中的,但是没有对这个Object
的引用,你无法访问这个变量。因此要想实现问题2的目的,需要把第一个Object
同时赋给另外一个变量b
,后面不管a
怎么变,b
永远指向第一个Object