tomasz.codes

Reference v JavaScriptu

publikováno 17.04.20222 min čtení

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ší$ .

primitivní typy
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$ .

jak funguje reference na objekt

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$ .