Reference v JavaScriptu
Kdo dělal někdy v C++ nebo jiných jazycích kde je potřeba řešit alokace paměti tak bude určitě vědět co je reference. V JavaScriptu se toto všechno řeší za nás, a tak programátoři nevědí co to znamená a často píšou kód co se pak chová nepředvídatelně a podivně, v horších případech může dojít k porušení bezpečnosti.
Krátké info co to je najdeš v docs $ Identifier$ .
Odkaz na proměnnou
Reference je odkaz na místo v paměti, kde je uložená proměnná nebo instance objektu. V JS se používá "zjednodušená reference" a protože v JS je hodně datových typů objekt tak se používá často. Reference se nejčastěji používají při předávání proměnné do funkce, kde se u primitivních typů vytvářejí kopie.
Hodnoty mohou být dvou typů:
- primitivní
- objekty
Primitivní typy se předávají jako kopie. Mezi primitivní typy patří např. boolean, number, string a $ další$ .
Objekty a jejich reference
Objekty jsou všechny složitější typy jako např. "normální" objekt, který má klíče a hodnoty, nebo pole hodnot, ale například i funkce jsou objekty. Detailní popis v $ dokumentaci$ .
Pokud takto měním hodnotu v objektu na dvou místech a nikde si nedělám kopii tak se zachová pouze ta hodnota změněná později (mění se na jednom místě). Na jednoduchém příkladu je to srozumitelné, ale pokud funkci A a funkci B voláme z nějakých cyklů tak se může stát, že budeme pracovat se špatnou hodnotou a těžko se to pak debuguje.
Proto v Reactu doporučuji pracovat s objekty tak, že budou immutable (je to požadavek i na propsy komponent). K docílení immutability se používají knihovny jako např. $ ramda$ .