Resumo : neste tutorial, você aprenderá sobre as diferenças entre as palavras-chave var
e let
.
Nº 1: escopos de variáveis
As var
variáveis pertencem ao escopo global quando você as define fora de uma função. Por exemplo:
var counter;
Linguagem de código: JavaScript ( javascript )
Neste exemplo, the counter
é uma variável global. Isso significa que a counter
variável é acessível por qualquer função.
Quando você declara uma variável dentro de uma função usando a var
palavra-chave, o escopo da variável é local. Por exemplo:
function increase() {
var counter = 10;
}
// cannot access the counter variable here
Linguagem de código: JavaScript ( javascript )
Neste exemplo, a counter
variável é local para a increase()
função. Não pode ser acessível fora da função.
O exemplo a seguir exibe quatro números de 0 a 4 dentro do loop e o número 5 fora do loop.
for (var i = 0; i < 5; i++) {
console.log("Inside the loop:", i);
}
console.log("Outside the loop:", i);
Linguagem de código: JavaScript ( javascript )
Saída:
Inside the loop: 0
Inside the loop: 1
Inside the loop: 2
Inside the loop: 3
Inside the loop: 4
Outside the loop: 5
Linguagem de código: Sessão Shell ( shell )
Neste exemplo, a i
variável é uma variável global. Portanto, ele pode ser acessado tanto de dentro quanto depois do for
loop.
O exemplo a seguir usa a let
palavra-chave em vez da var
palavra-chave:
for (let i = 0; i < 5; i++) {
console.log("Inside the loop:", i);
}
console.log("Outside the loop:", i);
Linguagem de código: JavaScript ( javascript )
Neste caso, o código mostra quatro números de 0 a 4 dentro de um loop e um erro de referência:
Inside the loop: 0
Inside the loop: 1
Inside the loop: 2
Inside the loop: 3
Inside the loop: 4
O erro:
Uncaught ReferenceError: i is not defined
Linguagem de código: JavaScript ( javascript )
Como este exemplo usa a let
palavra-chave, a variável i
tem escopo bloqueado. Isso significa que a variável i
só existe e pode ser acessível dentro do for
bloco de loop.
Em JavaScript, um bloco é delimitado por um par de chaves, {}
como nas instruções if...else
e for
:
if(condition) {
// inside a block
}
for(...) {
// inside a block
}
Linguagem de código: JavaScript ( javascript )
Nº 2: Criação de propriedades globais
As variáveis globais var
são adicionadas ao objeto global como propriedades . O objeto global está window
no navegador da web e global
no Node.js:
var counter = 0;
console.log(window.counter); // 0
Linguagem de código: JavaScript ( javascript )
Porém, as let
variáveis não são adicionadas ao objeto global:
let counter = 0;
console.log(window.counter); // undefined
Linguagem de código: JavaScript ( javascript )
Nº 3: Redeclaração
A var
palavra-chave permite redeclarar uma variável sem nenhum problema:
var counter = 10;
var counter;
console.log(counter); // 10
Linguagem de código: JavaScript ( javascript )
No entanto, se você declarar novamente uma variável com a let
palavra-chave, receberá um erro:
let counter = 10;
let counter; // error
Linguagem de código: JavaScript ( javascript )
#4: A zona morta temporal
As let
variáveis têm zonas mortas temporais, enquanto as var
variáveis não. Para entender a zona morta temporal, vamos examinar os ciclos de vida de ambas var
as let
variáveis, que possuem duas etapas: criação e execução.
As variáveis var
- Na fase de criação, o mecanismo JavaScript atribui espaços de armazenamento às
var
variáveis e as inicializa imediatamente emundefined
. - Na fase de execução, o mecanismo JavaScript atribui às
var
variáveis os valores especificados pelas atribuições, se houver. Caso contrário, asvar
variáveis permanecem indefinidas.
Consulte o contexto de execução para obter mais informações.
As variáveis let
- Na fase de criação, o mecanismo JavaScript atribui espaços de armazenamento às
let
variáveis, mas não inicializa as variáveis. Fazer referência a variáveis não inicializadas causará um arquivoReferenceError
. - As
let
variáveis têm a mesma fase de execução que asvar
variáveis.
A zona morta temporal começa no bloco até que a let
declaração da variável seja processada. Em outras palavras, é o local onde você não pode acessar as let
variáveis antes de elas serem definidas.
Neste tutorial, você aprendeu sobre as diferenças entre palavras-chave var
e let
.