美文网首页
一个面试题

一个面试题

作者: a4316976150e | 来源:发表于2017-02-25 05:16 被阅读0次

    <code>
    var a = {
    n:1
    }
    var b = a;
    a.x = a = {
    n:2
    }
    console.log(a.x)
    console.log(b.x)
    </code>
    连等赋值为A=B=C;从右往左,所以是C=B,B=A;
    所以这段代码应该是这样执行的:全局执行上下文创建后,创建变量对象时,创建一个变量a 它的值为一个引用地址的指针,指向n:1
    然后创建一个变量b,它的值为变量a的引用地址指针,此时,a和b是完全一样的
    然后执行下面的代码,按照早先的思路,连等赋值应该是从右往左执行的,应该是n:2这个值赋给a,然后a赋值给a.x,所以a.x应该为n;2,b.x应该为undefined;实际是错的。
    先创建一个新的引用地址 n:2
    .运算符是优先于=运算符的,所以先声明一个a的属性x,为undefined,此时a是指向b的,所以b现在也拥有一个x属性为undefied,然后将a变量的引用地址指针改变为n:2,因为a的变量引用地址指针变成了n:2,新的引用地址当中没有x这个属性,所以x为undefined.
    然后a.x现在指向的是旧的引用地址,也就是b的引用地址中的x,然后将b.x赋值为n:2。所以最后,a.x应该为undefined,b.x为n:2

    Paste_Image.png

    相关文章

      网友评论

          本文标题:一个面试题

          本文链接:https://www.haomeiwen.com/subject/bmegwttx.html