今天小何在群里面提出这样问题:
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仍然可以访问,且为匿名函数。