A semântica varelet
vare letsão uma declaração para a máquina e para outros programadores:
Pretendo que o valor dessa atribuição mude ao longo da execução. Não confie no valor eventual desta tarefa.
Implicações do uso varelet
vare letforçar outros programadores a lerem todo o código intermediário da declaração para o uso eventual e raciocinarem sobre o valor da atribuição naquele ponto na execução do programa.
Eles enfraquecem o raciocínio da máquina para que o ESLint e outros serviços de linguagem detectem corretamente nomes de variáveis digitados incorretamente em atribuições posteriores e reutilizam o escopo de nomes de variáveis de escopo externo onde o escopo interno esquece de declarar.
Eles também fazem com que os tempos de execução executem muitas iterações em todos os caminhos de código para detectar se são realmente constantes, antes que possam otimizá-los. Embora isso seja menos problemático do que a detecção de erros e a compreensibilidade do desenvolvedor.
Quando usar const
Se o valor da referência não for alterado ao longo da execução, a sintaxe correta para expressar a intenção do programador é const. Para objetos, alterar o valor da referência significa apontar para outro objeto, pois a referência é imutável, mas o objeto não é.
constobjetos " "
Para referências a objetos, o ponteiro não pode ser alterado para outro objeto, mas o objeto criado e atribuído a uma constdeclaração é mutável. Você pode adicionar ou remover itens de uma constmatriz referenciada e alterar chaves de propriedade em um constobjeto referenciado.
Para alcançar objetos imutáveis (que, novamente, facilitam o raciocínio de seu código para humanos e máquinas), você pode Object.freezeo objeto em declaração / atribuição / criação, como este:
const Options = Object.freeze(['YES', 'NO'])
O Object.freeze afeta o desempenho, mas seu código provavelmente está lento por outros motivos. Você deseja criar um perfil.
Você também pode encapsular o objeto mutável em uma máquina de estado e retornar cópias profundas como valores (é assim que o estado Redux e React funcionam). Consulte Evitando o estado global mutável no JS do navegador para obter um exemplo de como construir isso a partir dos primeiros princípios.
Quando vare leté uma boa combinação
lete varrepresentam estado mutável. Eles devem, na minha opinião, ser usados apenas para modelar o estado mutável real . Coisas como " a conexão está viva? ".
Elas são melhor encapsuladas em máquinas de estado testáveis que expõem valores constantes que representam " o estado atual da conexão ", que é uma constante a qualquer momento e em que o restante do seu código está realmente interessado.
A programação já é bastante difícil com a composição de efeitos colaterais e a transformação de dados. Transformar todas as funções em uma máquina de estados não testável, criando um estado mutável com variáveis apenas aumenta a complexidade.
Para uma explicação mais sutil, consulte Shun the Mutant - The case forconst .