我尝试根据运算符优先级来评估表达式,并得到了令人困惑的结果。

这是表达式:a.b(c).d(e,f)。

它由成员访问和函数调用运算符组成。
根据MDN OperatorPrecedence table
成员访问运算符具有从左到右的关联性,并且比函数调用运算符具有更高的优先级。

因此,在上面的表达式中,第二个成员访问必须在第一个函数调用之前发生。

那我想念的是什么?

最佳答案

成员访问运算符具有从左到右的关联性,并且比函数调用运算符具有更高的优先级。


这仅表示a.b(c)被评估为(a.b)(c),而不是a.(b(c))(无论如何都无效)。


  所以在上面的表达式中第二个成员访问必须在第一个函数cal之前发生


怎么可能foo().bar表示访问函数调用返回值的属性bar。如果必须在调用之前进行访问,应该访问哪个属性?

还是在您的示例中,应该在哪个对象上访问.daa.b

关于javascript - 运营商执行顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34004013/

10-09 20:13