Более простой пример:
(код)var x = 5;
var y = x--;
console.log(y); //5
В конечном счёте всё дело
в очерёдности, с чем бы вы ни имели дело: с замыканиями, с промисами и т.д. Сам язык по своей идеологии -
однопоточный.
А вот так:
foo.x = foo = {n: 2};
в реальной жизни, конечно же, делать не стоит, разве что вам нужна
обфускация кода. Для удобочитаемости можно даже расставлять скобки там, где они не нужны и ни на что не влияют, чтобы подчеркнуть порядок выполнения вычислений. В данном же случае цепочку присвоений лучше разбить на строки.
Это лишь вершина айсберга того, что используется при обфускации js. Однако эти приёмы вряд ли пригодятся при создании кода. Крут не тот, кто умеет запутывать своё и распутывать чужое, а кто пишет красиво и понятно.