Семантика var
таlet
var
і let
є заявою для машини та інших програмістів:
Я маю намір змінити значення цього завдання протягом ходу виконання. Не покладайтеся на можливу цінність цього завдання.
Наслідки використання var
таlet
var
і let
змусити інших програмістів прочитати весь проміжний код від декларації до можливого використання та обґрунтувати значення завдання в той момент виконання програми.
Вони послаблюють машинні міркування для ESLint та інших мовних служб для правильного виявлення помилкових імен змінних у пізніших призначеннях та повторного використання зовнішніх імен змінних зовнішніх областей, де внутрішня область забуває оголосити.
Вони також змушують виконувати багато ітерацій по всіх кодових шляхах, щоб виявити, що вони насправді є константами, перш ніж вони зможуть їх оптимізувати. Хоча це менше проблеми, ніж виявлення помилок та зрозумілість розробника.
Коли використовувати const
Якщо значення посилання не змінюється в ході виконання, правильним синтаксисом для вираження наміру програміста є const
. Для об'єктів зміна значення посилання означає вказівку на інший об'єкт, оскільки посилання є незмінним, але об'єкт - ні.
" const
" об'єкти
Для посилань на об'єкт вказівник не може бути змінений на інший об'єкт, але об'єкт, який створений і призначений для const
декларації, може змінюватися. Ви можете додавати або видаляти елементи із const
згаданого масиву та змінювати ключі властивостей на const
посилається об'єкт.
Щоб досягти незмінних об'єктів (що ще більше полегшує міркування коду для людей і машин), ви можете Object.freeze
об'єкт при оголошенні / призначенні / створенні, наприклад:
const Options = Object.freeze(['YES', 'NO'])
Object.freeze впливає на продуктивність, але ваш код, мабуть, повільний з інших причин. Ви хочете профайлювати це.
Ви також можете інкапсулювати змінний об'єкт у машині стану та повернути глибокі копії у вигляді значень (так працюють Redux та React). Див. Уникнення змінного глобального стану в браузері JS для прикладу того, як побудувати це на перших принципах.
Коли var
іlet
хороший матч
let
і var
представляють змінний стан. На мій погляд, їх слід використовувати лише для моделювання фактичного стану, що змінюється . Такі речі, як " живий зв'язок?" ".
Вони найкраще інкапсульовані в машинах, що перевіряються, які виставляють постійні значення, які представляють " поточний стан з'єднання ", який є константа в будь-який момент часу, і те, що насправді цікавить решту вашого коду.
Програмування вже досить важке для складання побічних ефектів та перетворення даних. Перетворення кожної функції в нестабільну машину стану, створюючи змінний стан зі змінними, що просто набирає складність.
Більш нюансове пояснення дивіться у розділі " Шунтовий мутант" - "Справа"const
.