-
Notifications
You must be signed in to change notification settings - Fork 0
/
escopo_variaveis.js
135 lines (98 loc) · 3.93 KB
/
escopo_variaveis.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
VAR:
Declarações com var tem escopo global ou escopo de função/local.
O escopo é global quando uma variável var é declarada fora de uma função.
Isso significa que qualquer variável que seja declarada com var fora de um bloco de
função pode ser utilizada na janela inteira.
var tem escopo de função quando é declarado dentro de uma função.
Isso significa que ele está disponível e pode ser acessado somente de dentro daquela função.
*/
/**
LET tem escopo global, escopo função/local etem escopo de bloco ao contrario do VAR
Um bloco é uma porção de código cercado por {}.
Um bloco vive dentro dessas chaves. Tudo o que estiver cercado por chaves é um bloco.
Assim, uma variável declarada com let em um bloco estará disponível apenas
dentro daquele bloco
*/
/**
* CONST: tem escopo global, escopo função/local etem escopo de bloco ao contrario do VAR
* Declarações com const têm escopo de bloco
* Assim como as declarações de let, as declarações de const somente podem
* ser acessadas dentro do bloco onde foram declaradas.
*/
var tester = "hey hi";
function newFunction() {
var hello = "hello";
}
console.log(hello); // erro: hello não está definido
// Variáveis de var podem ser declaradas de novo e atualizadas
// Isso significa que é possível fazer o seguinte dentro do mesmo escopo e
// não gerar um erro:
var greeter = "hey hi";
var greeter = "say Hello instead";
var greeter = "hey hi";
greeter = "say Hello instead";
//problema:
var greeter = "hey hi";
var times = 4;
if (times > 3) {
var greeter = "say Hello instead";
}
console.log(greeter) // o resultado será "say Hello instead"
//Se você já usou greeter em outras partes do seu código, pode se surpreender com
//o resultado que vai obter. Isso provavelmente causará vários bugs no seu código.
//LET
let greeting = "say Hi";
let times = 4;
if (times > 3) {
let hello = "say Hello instead";
console.log(hello);// dirá "say Hello instead"
}
console.log(hello) // hello não está definido
//Vemos que o uso de hello fora de seu bloco
//(as chaves dentro das quais a variável foi definida) retorna um erro.
//Isso ocorre porque as variáveis de let têm escopo de bloco.
//let pode ser atualizado, mas não declarado novamente.
//Assim como var, uma variável declarada com let pode ser atualizada dentro de seu escopo.
//Diferente de var, no entanto, uma variável let não pode ser declarada novamente dentro
//de seu escopo. O código a seguir funciona:
let greeting = "say Hi";
greeting = "say Hello instead";
//Este outro código, no entanto, retornará um erro:
let greeting = "say Hi";
let greeting = "say Hello instead"; // erro: identificador 'greeting' já foi declarado
//Porém, se a mesma variável for definida em escopos diferentes, não haverá erro:
let greeting = "say Hi";
if (true) {
let greeting = "say Hello instead";
console.log(greeting); // retornará "say Hello instead"
}
console.log(greeting); // retornará "say Hi"
////////////////////
function testeVariavel(){
pais = 'brasil'
}
testeVariavel()
console.log(pais)
//* DECLARAR UMA VARIÁVEL SEM AS PALAVRAS VAR OU LET, FAZ COM QUE ELA SE TORNE
//UMA VARIÁVEL GLOBAL
//ESCOPO DINÂMICO: O VALOR DE UMA VARÁVEL PODE MUDAR DEPENDENDO DO CONTEXTO
//OU DE QUEM A CHAMA
//ESCOPO LEXICAL: VALOR DA VARÁVEL É ESTÁTICO
//LET (DEVE SER USADA DENTRO DE LAÇOS DE REPETIÇÃO):
if(true){
var nome = 'joao'
let nome2 = 'maria'
}
console.log(nome)//nome que foi declarada com 'var' continua sendo acessivel fora do bloco
//console.log(nome2)//nome2 que foi declarada com 'let' só existe dentro do bloco e não existe fora
//variaveis let e const não podem ser redeclaradas ex.: (var pode)
//(só podem ser redeclaradas se estiverem em blocos diferentes)
let numero = 34
const e = 3
console.log(numero)
{
const e = 2
let numero = 20
console.log(numero)
}