Javascript 操作员执行命令

Javascript 操作员执行命令,javascript,Javascript,我试着用运算符优先级来计算表达式,结果相当混乱 下面是表达式:a.b(c),d(e,f) 它由成员访问和函数调用操作符组成。 根据 成员访问运算符具有从左到右的关联性,优先级高于函数调用运算符 所以在上面的表达式中,第二个成员访问必须发生在第一个函数调用之前 那么我错过了什么 成员访问运算符具有从左到右的关联性,优先级高于函数调用运算符 这仅仅意味着a.b(c)被评估为(a.b)(c),而不是a.(b(c))(这无论如何都是无效的) 所以在上面的表达式中,第二个成员访问必须发生在第一个函数cal

我试着用运算符优先级来计算表达式,结果相当混乱

下面是表达式:a.b(c),d(e,f)

它由成员访问和函数调用操作符组成。 根据 成员访问运算符具有从左到右的关联性,优先级高于函数调用运算符

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

那么我错过了什么

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

这仅仅意味着
a.b(c)
被评估为
(a.b)(c)
,而不是
a.(b(c))
(这无论如何都是无效的)

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

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


或者在您的示例中,应该在哪个对象上访问
.d
<代码>a
a.b

是的,我刚刚读到它,因为我有一个对象
a
,它有一个属性
b
b
是一个采用参数
c
的函数
b
返回一个对象,该对象具有一个属性
d
,该属性是一个函数,具有两个参数
e
f
。因为第二个函数
d
依赖于第一个函数
b
完成并返回对象。如果将上述表达式描述为(A op1 b op2 C op1 d op2 E,F),则所有op1必须发生在op2之前。正如我所说,我使用了运算符优先规则,得到了一些废话。所以我使用的规则是错误的,但什么是错误的?这是错误的,因为函数调用不是一个二进制运算符(我个人甚至不会称它为运算符)。因此,您必须将其写成
A op1 B op2 op1 d op2
。现在,对于要计算的第二个
op1
,必须首先计算左手边的
A op1 B op2
。谢谢!这个解释和raina77ow提到操作符优先级是关于分组的,而不是计算顺序,这澄清了这一点。