Então eu estava brincando outro dia apenas para ver exatamente como a atribuição em massa funciona em JavaScript.
Primeiro tentei este exemplo no console:
a = b = {};
a.foo = 'bar';
console.log(b.foo);
O resultado foi "bar" sendo exibido em um alerta. Isso é bastante justo ae , na bverdade , são apenas apelidos para o mesmo objeto. Então eu pensei, como eu poderia tornar este exemplo mais simples.
a = b = 'foo';
a = 'bar';
console.log(b);
É praticamente a mesma coisa, não é? Bem, desta vez, ele foonão retorna barcomo eu esperava do comportamento do primeiro exemplo.
Por que isso acontece?
NB Este exemplo pode ser simplificado ainda mais com o seguinte código:
a = {};
b = a;
a.foo = 'bar';
console.log(b.foo);
a = 'foo';
b = a;
a = 'bar';
console.log(b);
(Suspeito que o JavaScript trata primitivos como strings e inteiros de maneira diferente para hashes. Os hashes retornam um ponteiro, enquanto os primitivos "principais" retornam uma cópia de si mesmos)