javascript面试题,来看一看这道题输出的结果是多少,为什么呢?

这道JS的题目,考查的是对javascript中对象的理解。


  
  
  1. var a = {
  2. name: '小明'
  3. };
  4. var b = a;
  5. a = {
  6. name: '小王'
  7. };
  8. console.log(a.name);
  9. console.log(b.name);

问了一些群里的朋友,有些人认为最终输出的是  小王 小王 

而答案是:小王 小明 

在这个程序的执行过程中,javascript解释器到底对这些代码做了什么呢?

(抛开预解析不说,显然这道题跟预解析是没有关系的)

  1. 首先是在内存中创建了变量a的存储空间,假设其栈区存储的地址是0x123456
  2. 然后将其地址传给了变量b


  3. 随后呢,又将新的对象字面量传给了变量a
  4. 这时,内存中发生了一些变化,b依旧指向a,但此时b指向并不是第4步最新赋值的a,而是被赋值前的a
  5. 这里可以用一张图去说明一下


  6. 此时的内存结构应该就是这样子的,因此最后输出的结果应该是:
    
        
        
    1. console.log(a.name); //小王
    2. console.log(b.name); //小明

猜你喜欢

转载自blog.csdn.net/Honey_tianming/article/details/81327567