当多个运算符出现在一个语句中,会有执行的先后顺序。
例如:var a=b,c,d;=>var a=b;var c;var d;就是声明了a c d变量,a赋了值为b变量的值。
执行先后顺序:赋值运算符优先级高于逗号运算符则,先执行赋值运算符的表达式。先取变量b的值,再赋值给a变量。再执行逗号运算符的表达式,会把逗号隔开的表达式从左到右依次执行。
关于圆括号和new 无参和new 带参以及成员访问的优先级
obj.nmae:成员访问,从左到右是先访问到对象obj再取出成员name的成员值。
obj["name"]是需计算的成员访问
new fn():new带参,new和函数名的标识符以及(),只要中间是函数名三者是一个整体不可分割,(new fn())
new fn:new无参,从右往左是先访问到函数fn再用这个函数去创建对象
fn():函数调用,从左往右是先访问到函数fn再调用。
成员访问 new obj.fn()=>(new (obj,fn) ())是先取出obj对象的fn成员是一个函数,再用这个函数去new带参创建对象。
new new foo.rank()()=>(new (new (foo.rank)()) ())是先取出对象foo的成员rank是一个函数再用这个函数去new带参创建对象,创建的对象又是一个函数,再用这个函数去创建对象。new new foo.rank()()=>(new (new (foo.rank)()) ())是先取出对象foo的成员rank是一个函数再用这个函数去new带参创建对象,创建的对象又是一个函数,再用这个函数去new带参创建对象。