Ответ можно найти на странице MDN на Приоритет оператора (выделено мной):
Ассоциативность определяет, как операторы с одинаковым приоритетом анализируются , Например, рассмотрим выражение:
a OP b OP c
Ассоциативность слева (слева направо) означает, что оно обрабатывается как (a OP b) OP c
, а ассоциативность справа (справа налево) означает, что оно интерпретируется как a OP (b OP c)
.
Ассоциативность вступает в игру только в том случае, если у вас есть несколько операторов с одинаковым приоритетом. В случае если у вас есть несколько операторов присваивания, они оцениваются справа налево, но каждый отдельный оператор присваивания все еще присваивает операнду right имени left .
В вашем фрагменте кода:
y = z = 10;
Это эквивалентно:
y = (z = 10);
И так как оператор присваивания оценивает значение, которое было присвоено (10), вы получаете y = 10;
после присвоения z
.
Если у вас есть только один оператор , ассоциативность не применяется. В операторе присваивания правый операнд назначается левому операнду, полная остановка. Порядок, в котором они оцениваются , определяется приоритетом оператора, как указано на странице MDN выше.