
Quando aprendemos uma linguagem de programação, vários conceitos básicos aparecem, como declarar variáveis, e são tão simples que podemos começar a usá-los sem nenhum conhecimento de seu funcionamento.
Sei o que você pensou: "Por que você está perdendo tempo escrevendo para nós sobre isso?"
Porque acho que vale a pena gastar alguns minutos para entender melhor esses elementos, qual é o significado deles e como devemos usá-los. Isso ajudará a evitar alguns erros comuns e a escrever melhor o código.
Neste artigo, focaremos em como armazenar dados em JavaScript.
Var
"Era uma vez em uma galáxia distante ..." a única opção para definir variáveis em JavaScript era usar a palavra-chave var, o que era suficiente para manipular os dados no código. Mas com a introdução do padrão ES6, algumas das peculiaridades e fraquezas do antigo JS se tornaram bastante óbvias:
- Escopo: a palavra-chave var permite definir variáveis apenas no escopo global e local (ou no escopo de uma função). Não importa quantos blocos de código aninhados você tenha, existem apenas essas duas possibilidades.
- Constantes: se você deseja definir algo que não será alterado durante a execução do código, poderá confiar apenas no senso comum dos desenvolvedores. Podemos usar algumas convenções úteis para esclarecer o significado (por exemplo, letras maiúsculas), mas não há nada para garantir que o significado não mude.
- Substituindo Variáveis: Você pode repetir a declaração da mesma variável quantas vezes quiser (no mesmo escopo), e isso é um pouco confuso se você deseja manter as variáveis exclusivas.
Definições
Antes de começar com o material técnico, vamos apresentar algumas definições gerais:
Uma variável é um "contêiner" no qual dados reutilizáveis são armazenados (muito triviais).
Identificadores são nomes de variáveis (também muito triviais).
Um bloco é um pedaço de código separado por um par de chaves (
ccskrf ), por exemplo: if, for, function e. etc.
Escopo , determina a visibilidade das variáveis dentro do código. Se você tiver alguma dúvida, pergunte-se: "Onde está minha variável visível no código?"
NOTA Por favor, não confunda o escopo com o contexto de execução , que é diferente.** Contexto (ou contexto de execução) ** é o ambiente no qual o código JavaScript é executado. Para simplificar, podemos dizer que o
contexto é o objeto ao qual o código pertence e
esta é a palavra-chave que se refere a ele. Então, pergunte-se: "A que objeto isso se refere?"
Agora, suponha que nosso desenvolvedor seja muito apaixonado por Guerra nas Estrelas (o que é bom), mas desconfie de novos padrões como o ES6 (o que é ruim), embora ele já exista há algum tempo. Portanto, ele prefere escrever seu código no antigo estilo ES5, e ficará assim:
console.log("I am a %s", jedi); var jedi = "Ani";
Como você pode ver, existem três blocos de código (incluindo global), mas apenas dois escopos. Isso ocorre porque o código entre parênteses não cria um escopo. O console emitirá "Eu sou Darth Vader" duas vezes e depois "Eu sou Ani" globalmente.
Observe também que a mesma variável é declarada duas vezes seguidas dentro da função e, em seguida, novamente na instrução if. Isso significa que temos a declaração da mesma variável no mesmo escopo três vezes, o que gera uma exceção.
Por último, mas não menos importante, a saída do primeiro log é: imprimimos o valor de nossa variável antes de defini-la. Isso é completamente legal com var e é chamado de "içamento".
A "subida" pressupõe que as variáveis e funções declaradas sejam fisicamente movidas para o início do seu código. Tecnicamente, há declarações de variáveis e funções que são armazenadas na memória no estágio de compilação, mas permanecem no código exatamente onde você as escreveu. A importância fundamental de um aumento é que ele permite que você use funções antes de declará-las em seu código.
Você pode ler sobre isso
aqui .
No nosso exemplo, a declaração da variável "jedi" é colocada na memória e inicializada com o valor padrão (indefinido).
Vamos
No momento, nosso desenvolvedor entende que o ES6 não é tão ruim e decide dar uma chance:
console.log("I am a %s", jedi); let jedi = "Ani";
Mas ele logo percebe que não pode simplesmente alterar a palavra-chave var, pois é necessário fazer algumas correções:
O aumento não funciona da mesma maneira: uma
variável é colocada em um estado chamado Zona Mortal Temporal * * e não é inicializada até que a definição seja avaliada. No nosso exemplo, ele lança um erro: erro de referência.
é proibida a
reatribuição , a definição de uma variável no escopo deve ser única. Ao tentar obter um erro: SyntaxError.
A instrução if é um escopo de bloco válido, portanto, a declaração jedi dentro dela é única.
Agora o código deve ser assim:
let jedi = "Ani"; console.log("I am a %s", jedi);
Const
Agora que você sabe tudo sobre o let, será fácil apresentá-lo ao
const . Em essência, podemos dizer que const é semelhante a let, mas você não pode reatribuir outro valor. Você também precisa saber que a atribuição é permitida apenas durante declarações const.
function useTheForce(comeToTheDarkSide) { const jedi = "Yoda"; if (true) { jedi = "Darth Yoda"; console.log("I am %s", jedi);
Suponha que, em nosso exemplo, "jedi" seja uma constante com o valor "Yoda", se tentarmos alterar o valor dentro da instrução if, isso nos dará um erro TypeError, e isso é compreensível porque o Yoda nunca se unirá ao lado sombrio.
Conclusão
Quando é impossível expressar um conceito em palavras em idiomas, um novo conceito é introduzido para preencher a lacuna. Isso está correto para inglês (
link. ), Italiano, esperanto, ewokese (suponho), etc. Isso é ainda mais verdadeiro para linguagens de programação como JavaScript.
Agora você sabe que pode:
- Declarar variáveis no escopo do bloco e alocar memória para elas somente ao avaliar o bloco
- Mantenha as declarações de variáveis exclusivas dentro do escopo, evitando que o desenvolvedor substitua por engano a variável usada em outra parte do código (com um valor diferente)
- Podemos garantir que a variável armazenada em const não seja alterada a qualquer momento.
Minha última dica é usar const como sua opção padrão. Quando precisar reatribuir uma variável, use ** let ** (como nos loops). E use var quando ... não, você não precisa mais de var, realmente
Obrigado pela atenção.
Perguntas rápidas sobre
JavascriptEstou no
twitter e
vk