今天小何在群里面提出这样问题:
var a={};
a.b = a = function(){}
alert(a.b); //undefined
一个连续赋值将问题变得有些复杂,将上面稍作变形
var a={};var a1 = a;
c = a.b = a = function(){}
alert(c); //function(){}
alert(a1.b); //function(){}
a.b是在对象{}的属性列表里增加一项属性,因为"."的运算优先级高,这个工作在赋值运算之前。其他的工作就如同连续赋值一样,自右向左进行。由于a已经指向了其他对象,a.b变为undefined;a1指向的是原对象,所以a1.b仍然可以访问,且为匿名函数。
本文通过几个具体的JavaScript代码示例,解析了连续赋值过程中对象属性的变化情况,并解释了为何某些属性会变成undefined的原因。

被折叠的 条评论
为什么被折叠?



