Oi Renato, estou respondendo ao André. Pode pegar carona na explicação, mas nesse estágio, o escopo global é seu amigo, tudo bem? É uma resposta mais específica e avançada para o estágio no qual nos encontramos neste curso. Se você se identificar com JavaScript e evoluir em nossos cursos verá outras formas.
André, variáveis globais podem ser sobrescritas indevidamente por outro programa quando outro programa declara outra variável de mesmo nome no escopo global. Isso aqui foge do escopo desse treinamento, mas já que você perguntou vamos lá.
Você já aprendeu nos cursos da Alura a importar scripts? Isso porque neste curso de lógica não entro nesse mérito porque é algo muito exclusivo da linguagem JavaScript. Se sim, fica mais fácil entender o problema. Veja o código:
<!-- página index.html, por exemplo -->
<script src="a.js"></script>
<script src="b.js"></script>
<script>
exibeNomePessoa(); // o que vai exibir?
</script>
Veja que a página importou dois scripts e eles são carregados na ordem em que foram definidos.
Agora vamos ao conteúdo de a.js
:
// variável esta no escopo global
var nome = 'Flávio';
function exibeNomePessoa() {
// variável que esta no escopo global pode ser usada por exibeNomePessoa!
alert(nome);
}
Agora vamos ao conteúdo de b.js
:
// escopo global
var nome = 'Alura';
function exibeNomeEmpresa() {
alert(nome);
}
Como b.js foi carregado depois de a.js, ele declarará a variável nome
. Quem passa a valer agora é o valor da variável declarada em b.js
, ou seja, gravou por cima de um valor no escopo global.
Agora, quando algume chamar exibeNomePessoa
o valor será Alura
e não Flávio
.
A solução para problemas como esse não é de lógica de programação, mas domínio sólido da linguagem JavaScript. Você vê problemas como esse e solução nos cursos avançados de JavaScript da Alura.
Sendo assim, como disse, para quem esta começando no mundo da programação usar o escopo Global para compartilhar dados comuns entre funções é válido. Contudo, quando a pessoa sair da lógica de programação e quiser investir nos detalhes de uma linguagem verá que cada linguagem possui artifícios para contornar o problema do escopo global.