Scope refere-se à disponibilidade de variáveis e funções em certas partes do Código.
Em JavaScript, uma variável tem dois tipos de escopo:
- Escopo Global
- Escopo Local
Escopo 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 uma 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. 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 variablelet a = "hello";function greet() { a = 3;}// before the function callconsole.log(a);//after the function callgreet();console.log(a); // 3
no programa acima, a variável A é uma variável global. O valor de A é Olá. Então a variável a é acessada dentro de uma função e o valor muda para 3.
portanto, o valor de uma mudança após alterá-la dentro da função.Nota: É uma boa prática evitar usar variáveis globais porque o valor de uma variável global pode mudar em diferentes áreas do programa. Pode introduzir resultados desconhecidos no programa.
em JavaScript, uma variável também pode ser usada sem declará-la. Se uma variável é usada sem declará-la, essa variável automaticamente se torna 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 iria lançar um erro.Nota: Em JavaScript, há "strict mode"; em que uma variável não pode ser usada sem declará-la. Para saber mais sobre strict, visite JavaScript Strict.
Escopo Local
Uma variável também pode ter um escopo local, eu.e ele só pode ser acessado dentro de uma função.
Exemplo 1: Local de Escopo Variável
// program showing local scope of a variablelet a = "hello";function greet() { let b = "World" console.log(a + b);}greet();console.log(a + b); // error
Saída
helloWorldUncaught ReferenceError: b is not defined
No programa acima, uma variável é uma variável global e a variável b é uma variável local. A variável b só pode ser acessada dentro da função greet. Assim, quando tentamos acessar a variável b fora da função, ocorre um erro.
let is Block Scoped
The let keyword is block-scoped (variable can be accessed only in the immediate block).
Exemplo 2: bloco de escopo Variável
// program showing block-scoped concept// global variablelet 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();
Saída
Hello WorldHello World helloUncaught ReferenceError: x is not defined
No programa acima, a variável
- é uma variável global. Ele pode ser acessado em qualquer lugar do programa.
- b é uma variável local. It can be accessed only inside the function
greet. - C é uma variável em bloco. It can be accessed only inside the
ifstatement block.
portanto, no programa acima, os dois primeiros console.log() trabalham sem qualquer problema.
no entanto, estamos tentando acessar a variável C de escopo em bloco fora do bloco no terceiroconsole.log(). Isto vai lançar um erro.
nota: em JavaScript, varé função escopada elet é scoped em bloco. Se você tentar usar var c = 'hello'; dentro de if instrução no programa acima, todo o programa funciona, como c é tratada como uma variável local.
para saber mais sobre let versus var, visite JavaScript let vs var.