<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
一个面试题
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...