Capisco che l'operatore di assegnazione abbia ragione associativo.Confusione di assegnazioni multiple
Così, per esempio x = y = z = 2
equivale a (x = (y = (z = 2)))
Stando così le cose, ho provato la seguente:
foo.x = foo = {a:1}
mi aspettavo che l'oggetto foo
verrebbe creato con valore {a:1}
e quindi la proprietà x
sarà creato il foo
che sarà solo un riferimento all'oggetto foo
.
(Questo è in realtà quello che succede se ero a separare l'istruzione di assegnazione multipla in due separati prospetti foo = {a:1};foo.x = foo;
)
Il risultato è stato in realtà:
ReferenceError: foo is not defined(…)
Allora ho provato la seguente:
var foo = {};
foo.x = foo = {a:1};
Ora non ottengo più l'eccezione ma foo.x
non è definito!
Perché il compito non funziona come mi aspettavo? Declinazione di responsabilità: la domanda "duplicata" sembra essere molto diversa da quella che sto chiedendo, poiché il problema è che le variabili create nell'assegnazione erano globali, come appunto alle variabili create con il var
parola chiave. Questo non è il problema qui.
a 'var foo;' è in ordine –
Buona domanda. Anche dopo aver usato var foo, non vedo un puntello "x" nell'oggetto foo. Come succede? –
@PaulRoub Non è un problema - ho aggiunto una dichiarazione di non responsabilità nella domanda con una breve spiegazione del perché – Danield