Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Um pouco confuso...

Entrei em todas as dúvidas desse tópico, e notei que houve uma confusão entre as palavras "parâmetro" e "variável". Em um tópico foi respondido que a palavra "frase" funcionava como um parâmetro, no entanto, depois de alguns comentário é falado que "frase" é na verdade uma variável. Fui em outro tópico e encontrei a seguinte mensagem "O parâmetro não é uma variável, a variável um espaço de memória que você reserva, ela depois ser declarada fora ou dentro de uma função. Ou seja, "frase" não pode ser um parâmetro e uma váriavel ao mesmo tempo porque parametro e variavel são coisas diferentes. Estou em dúvida de como funciona minuciosamente a leitura do código

function mostra(frase) {

        document.write(frase)

    }
4 respostas
solução!

Boa tarde, Raul

Os parâmetro também são variáveis, muitas vezes pode aconteceu um confusão no escopo dessa variável, em javascript o escopo ele delimitado pelas chaves { }, observe o código seguinte

<script>
var frase = `Observe que existem duas variáveis com o mesmo nome,
mas elas estão em escopos diferentes</br>`; /* Esta variável é global, ou seja,
 ela pode ser acessada de qualquer lugar do código, qualquer escopo.*/

function mostra(frase) {
    // Dentro dessa função, frase é uma variável local, no escopo da função mostra.
    // Se quiséssemos acessar a variável global, usaria o `this.frase´
    document.write(frase);
    console.log(this.frase);// this.frase é uma variável de fora do escopo da função
    var souDaFuncao = "Estou dentro da função"; // souDaFuncao é uma variável local, so pode sere acessada daqui
}   

//console.log(souDaFuncao); Isso não funciona, pois souDaFuncao é uma variável local da função mostra

mostra(frase);

var nome = "Raul";// Esta variável também é global.
// var sempre são globais.

mostra(`Estou no escopo de ${nome}</br>`); // nome é uma variável do escopo global


// Esse é o começo do escopo delimitado pelas chaves {}.
{// Isso não é uma função, mas sim um escopo delimitado pelas chaves {}.
    let nome = "Nicolas"
    mostra(`Agora Estou no escopo de ${nome}</br>`); // Aqui nome é uma variável local.

    // Para eu acessar a variável definida fora desse escopo, eu preciso usar o this keyword.
    //Exemplo:
    mostra(`Eu ${this.nome} estou fora desse escopo mas consigo ser acessado do escopo de ${nome}</br>`)
    let x = 10;// X foi criado aqui é so pode ser acessado dentro desse escopo
    var y = 20;// Y foi criado aqui mas pode ser acessado de qualquer lugar. mas isso não funciona em funções.
}
// x não pode ser acessado fora do escopo delimitado pelas chaves {}.

console.log(`y = ${y}`);// usado y é um var que foi criado no escopo Nicolas que não não é uma função, então pode ser acessado

mostra(`Agora estou no escopo de ${nome} de volta </br>`); // nome é uma variável do escopo global

</script>

No código temos variáveis que possuem nomes iguais, mas estão em escopos diferentes. pode-se dizer que o escopo é o "tempo da vida de uma variável", algumas tem um espoco grande e podem ser acessara por escopos interiores e que são menores e só podem ser acessadas "localmente".

Opa, ótima explicação Nicolas, até entendi melhor o conceito haha

Para mim infelizmente ainda não ficou mto claro o conceito. Acredito que a explicação dada assim tenha sido perfeita, mas em um cenário em que a pessoa esta dando seus primeiros passos em logica e programação, ficou extremamente confuso.

Talvez erroneamente, mas entendi que no exemplo dado pelo professor, a função frase, funciona como uma variável que ao invés de ter um valor fixo como var xpto = 15 , toda vez que ele chama a função frase, é como se ela usasse e interpretasse valores diferentes que são dados para a função cada vez que ela é executada. "Uma variável mutável, sem um valor fixo a cada execução".

Seria isso?