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

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

        var a = {
            name: '小明'
        };

        var b = a;

        a = {
            name: '小王'
        };
        console.log(a.name);
        console.log(b.name);

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

而答案是:小王 小明 

 

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

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

  1. 首先是在内存中创建了变量a的存储空间,假设其栈区存储的地址是0x123456
  2. 然后将其地址传给了变量b
  3. javascript面试题,来看一看这道题输出的结果是多少,为什么呢?_第1张图片

  4. 随后呢,又将新的对象字面量传给了变量a
  5. 这时,内存中发生了一些变化,b依旧指向a,但此时b指向并不是第4步最新赋值的a,而是被赋值前的a
  6. 这里可以用一张图去说明一下
  7. javascript面试题,来看一看这道题输出的结果是多少,为什么呢?_第2张图片

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

     

(以上是我个人理解,如有不当,请多指点,谢谢)

 

你可能感兴趣的:(面试题的一些个人见解)