JavaScripti omistamislause
Ja nüüd midagi, mis on mul huvitaval kombel siiani kahe silma vahele jäänud, aga mida lugesin Stoyan Stefanovi raamatust JavaScript Patterns ja mis tagantjärele tundub täiesti loogiline.
var a = b = c = 5;
Ei ole sugugi sama, mis
var a = 5;
var b = 5;
var c = 5;
Vaid hoopis
var a = 5;
b = 5;
c = 5;
Ehk et muutujatest b ja c saavad lokaalsete asemel hoopis globaalsed muutujad!
Samal teemal veel
Igaks juhuks märgin ära veel samasse teemasse kuuluva, aga juba tuntud probleemi
a = b = [];
c = d = {};
e = f = 5;
Sellise omistamise korral ei saa me mitte 2 massiivi-, kaks objekti- ja kaks numbriväärtust, vaid kaks numbriväärtust (e ja f, mõlema väärtuseks nr 5) ja ühe massiivi- ning ühe objektiväärtuse.
a ja b ei ole mitte eraldi väärtused, vaid kaks muutujat, mis viitavad ühele ja samale massiiviväärtusele. JavaScriptis on objektide edastamine (ka massiiv on objekt) alati BY REFRENCE.
Seega lause
a = b = [];
võib lahti kirjutada ka kui
a = (b=[]);
ehk
b = [];
a = b; // BY REFRENCE!