Semantyka varilet
vari letsą 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 varilet
vari letzmusić 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.
constobiekty „ ”
W przypadku odniesień do obiektu wskaźnika nie można zmienić na inny obiekt, ale obiekt utworzony i przypisany do constdeklaracji można modyfikować. Możesz dodawać lub usuwać elementy z consttablicy, do której istnieje odwołanie, oraz mutować klucze właściwości w obiekcie, do którego istnieje constodwołanie.
Aby osiągnąć niezmienne obiekty (które ponownie ułatwiają zrozumienie kodu dla ludzi i maszyn), możesz Object.freezeobiekt 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 vari letsą dobrym dopasowaniem
leti varreprezentują 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 .