Semantyka var
ilet
var
i let
są instrukcją dla maszyny i innych programistów:
Zamierzam zmienić wartość tego zadania w trakcie wykonywania. Nie polegaj na ostatecznej wartości tego zadania.
Implikacje użycia var
ilet
var
i let
zmusić innych programistów do odczytania całego kodu pośredniczącego od deklaracji do ostatecznego użycia oraz uzasadnienia wartości przypisania w tym momencie wykonywania programu.
Osłabiają one rozumowanie maszynowe dla ESLint i innych usług językowych w celu prawidłowego wykrywania błędnie wpisanych nazw zmiennych w późniejszych przypisaniach i ponownego użycia zakresu nazw zmiennych zewnętrznych, w przypadku gdy zasięg wewnętrzny zapomina się zadeklarować.
Powodują także, że środowiska wykonawcze uruchamiają wiele iteracji na wszystkich ścieżkach kodowych w celu wykrycia, że faktycznie są stałymi, zanim będą mogły je zoptymalizować. Chociaż jest to mniejszy problem niż wykrywanie błędów i zrozumiałość dla programistów.
Kiedy użyć const
Jeśli wartość referencji nie zmienia się w trakcie wykonywania, poprawna składnia wyrażająca zamiary programisty to const
. W przypadku obiektów zmiana wartości odniesienia oznacza wskazanie na inny obiekt, ponieważ odwołanie jest niezmienne, ale obiekt nie.
const
obiekty „ ”
W przypadku odniesień do obiektu wskaźnika nie można zmienić na inny obiekt, ale obiekt utworzony i przypisany do const
deklaracji można modyfikować. Możesz dodawać lub usuwać elementy z const
tablicy, do której istnieje odwołanie, oraz mutować klucze właściwości w obiekcie, do którego istnieje const
odwołanie.
Aby osiągnąć niezmienne obiekty (które ponownie ułatwiają zrozumienie kodu dla ludzi i maszyn), możesz Object.freeze
obiekt w deklaracji / przypisaniu / tworzeniu, w następujący sposób:
const Options = Object.freeze(['YES', 'NO'])
Object.freeze ma wpływ na wydajność, ale Twój kod jest prawdopodobnie powolny z innych powodów. Chcesz to profilować.
Możesz także enkapsulować obiekt zmienny w maszynie stanów i zwracać głębokie kopie jako wartości (tak działa stan Redux i React). Zobacz Unikanie zmiennego stanu globalnego w przeglądarce JS, aby dowiedzieć się, jak zbudować to na podstawie pierwszych zasad.
Kiedy var
i let
są dobrym dopasowaniem
let
i var
reprezentują stan zmienny. Moim zdaniem powinny być używane tylko do modelowania rzeczywistego stanu zmiennego . Rzeczy takie jak „ czy połączenie jest żywe? ”.
Najlepiej są one enkapsulowane w testowalnych maszynach stanów, które ujawniają stałe wartości, które reprezentują „ bieżący stan połączenia ”, który jest stały w dowolnym momencie, i czym tak naprawdę interesuje się reszta kodu.
Programowanie jest już wystarczająco trudne do komponowania efektów ubocznych i przekształcania danych. Przekształcenie każdej funkcji w maszynę stanu nie do przetestowania poprzez utworzenie stanu zmiennego ze zmiennymi tylko nakłada się na złożoność.
Aby uzyskać bardziej szczegółowe wyjaśnienie, zobacz Shun the Mutant - Case forconst
.