这道JS的题目,考查的是对javascript中对象的理解。
-
var a = {
-
name:
'小明'
-
};
-
-
var b = a;
-
-
a = {
-
name:
'小王'
-
};
-
console.log(a.name);
-
console.log(b.name);
问了一些群里的朋友,有些人认为最终输出的是 小王 小王
而答案是:小王 小明
在这个程序的执行过程中,javascript解释器到底对这些代码做了什么呢?
(抛开预解析不说,显然这道题跟预解析是没有关系的)
- 首先是在内存中创建了变量a的存储空间,假设其栈区存储的地址是0x123456
- 然后将其地址传给了变量b
-
- 随后呢,又将新的对象字面量传给了变量a
- 这时,内存中发生了一些变化,b依旧指向a,但此时b指向并不是第4步最新赋值的a,而是被赋值前的a
- 这里可以用一张图去说明一下
-
- 此时的内存结构应该就是这样子的,因此最后输出的结果应该是:
-
console.log(a.name); //小王
-
console.log(b.name); //小明
-