Neste tutorial, você aprenderá sobre escopo de variável em JavaScript com a ajuda de exemplos.
O escopo se refere à disponibilidade de variáveis e funções em certas partes do código.
Em JavaScript, uma variável tem dois tipos de escopo:
- Âmbito global
- Escopo Local
Âmbito global
Uma variável declarada no topo de um programa ou fora de uma função é considerada uma variável de escopo global.
Vamos ver um exemplo de variável de escopo global.
// program to print a text let a = "hello"; function greet () ( console.log(a); ) greet(); // hello
No programa acima, a variável a é declarada no topo de um programa e é uma variável global. Isso significa que a variável a
pode ser usada em qualquer lugar do programa.
O valor de uma variável global pode ser alterado dentro de uma função. Por exemplo,
// program to show the change in global variable let a = "hello"; function greet() ( a = 3; ) // before the function call console.log(a); //after the function call greet(); console.log(a); // 3
No programa acima, a variável a é uma variável global. O valor de a é hello. Em seguida, a variável a é acessada dentro de uma função e o valor muda para 3.
Conseqüentemente, o valor de a muda após alterá-lo dentro da função.
Nota : É uma boa prática evitar o uso de variáveis globais porque o valor de uma variável global pode mudar em diferentes áreas do programa. Ele pode introduzir resultados desconhecidos no programa.
Em JavaScript, uma variável também pode ser usada sem declará-la. Se uma variável for usada sem declará-la, essa variável se tornará automaticamente uma variável global.
Por exemplo,
function greet() ( a = "hello" ) greet(); console.log(a); // hello
No programa acima, a variável a é uma variável global.
Se a variável foi declarada usando let a = "hello"
, o programa geraria um erro.
Nota : Em JavaScript, existe "strict mode";
em que uma variável não pode ser usada sem declará-la. Para saber mais sobre estrito, visite JavaScript Strict.
Escopo Local
Uma variável também pode ter um escopo local, ou seja, só pode ser acessada dentro de uma função.
Exemplo 1: Variável de Escopo Local
// program showing local scope of a variable let a = "hello"; function greet() ( let b = "World" console.log(a + b); ) greet(); console.log(a + b); // error
Resultado
helloWorld Uncaught ReferenceError: b não está definido
No programa acima, a variável a é uma variável global e a variável b é uma variável local. A variável b pode ser acessada apenas dentro da função greet. Portanto, quando tentamos acessar a variável b fora da função, ocorre um erro.
let is Block Scoped
A let
palavra-chave tem escopo de bloco (a variável pode ser acessada apenas no bloco imediato).
Exemplo 2: variável com escopo de bloco
// program showing block-scoped concept // global variable let a = 'Hello'; function greet() ( // local variable let b = 'World'; console.log(a + ' ' + b); if (b == 'World') ( // block-scoped variable let c = 'hello'; console.log(a + ' ' + b + ' ' + c); ) // variable x cannot be accessed here console.log(a + ' ' + b + ' ' + c); ) greet();
Resultado
Hello World Hello World hello Uncaught ReferenceError: x não está definido
No programa acima, a variável
- a é uma variável global. Ele pode ser acessado em qualquer lugar do programa.
- b é uma variável local. Ele pode ser acessado apenas dentro da função
greet
. - c é uma variável com escopo de bloco. Ele pode ser acessado apenas dentro do
if
bloco de instruções.
Portanto, no programa acima, os dois primeiros console.log()
funcionam sem problemas.
No entanto, estamos tentando acessar a variável de escopo de bloco c fora do bloco no terceiro console.log()
. Isso gerará um erro.
Observação : em JavaScript, var
tem escopo de função e escopo de let
bloco. Se você tentar usar var c = 'hello';
dentro da if
instrução do programa acima, todo o programa funcionará, pois c é tratado como uma variável local.
Para saber mais sobre let
versus var
, visite JavaScript let vs var.