Duvida em código

Olá pessoa criei esse código mas tive duvidas em relação a parte de como Javascript interpreta as variáveis, pois eu tenho uma função “mostrar(pontos)”, porem para a entrada dos pontos do time adversário eu uso a variáveis pontos_adv e mesmo assim ele interpreta aquilo e escreve na tela, entao a função “mostrar(pontos)” pode interpretar outros valores nao somente (pontos) e outra, tenho os dados de entrada (vitorias e empates) assim que eles entram e chamo a função pontos_adv = calculaPontos(vitorias,empates) os valores efetuam o calculo dentro da função?

> <script>
> var calculaPontos = function(vitoria, empate) {
> var empate = parseInt(empate)
> return (vitoria * 3) + empate;
> }

> var pular  = function (){
> document.write("<br><br><hr>")
> }
>  pontuacaodotime = function(vitoria,empate){
> 	var empate = parseInt(empate)
> 	var pontos = (vitoria*3)+empate
> 	return pontos
> 	}
> 	var mostrar = function(pontos){
> document.write(pontos)
> pular ()
> }
> 	var vitoria = prompt ("digite o numero de vitorias do adversario: ")
> 	var empate = prompt ("digite o numero de empates do adversario: ")
> 	pontos_adv = calculaPontos(vitoria,empate)
>     mostrar ("numero de pontos do time adversario é: "+pontos_adv+" pontos")
> 	
> 	
> 	

> 	var vitoria = prompt ("digite o numero de vitorias nosso time: ")
> 	var empate = prompt ("digite o numero de empates do nosso time: ")
> 	pontos  = pontuacaodotime(vitoria,empate)
>     mostrar ("numero de pontos do nosso time é: "+pontos+" pontos")
> 	
> 	
> 	
> 	if(pontos >pontos_adv ) {
> mostrar("Nosso time está indo MELHOR que o Livros Velhos!")
> }
> 	else if (pontos  == pontos_adv){
> 	mostrar("Nosso time está EMPATADO com o Livros Velhos!")
> }
> 	else{ 
> mostrar("Nosso time está indo PIOR que o Livros Velhos!");
> }	
> 	</script>

Quando vc chama uma função, ela executa qualquer coisa colocado em seu corpo e, se houver um return, retorna um valor qualquer.

var soma = function(a, b) {
  return a + b;
}

Acho que sua dúvida deve ser com relação a como uma função é criada em JS.

Cada variável tem um tipo, que representa o valor contido nela. Umas são números, outras texto.

var numero = 123; // o tipo de numero é number
var texto = "Hello"; // o tipo de texto é string (que é um conjunto de caracteres)

Da mesma forma que tem variáveis de tipo number ou string, há variáveis do tipo function!

No exemplo da variável soma lá em cima, ela é a função. Em outras palavras, o valor contido nela é function. e quando vc coloca os parenteses como em soma(123, 456), o interpretado do JS entende que uma função está sendo invocada.

Ela poderia ser usada pra somar quantidades, pesos, distancias, pontuação dos seus times. Qualquer coisa que vc usar como argumento, ela vai tentar somar pra vc.

No caso do seu código, há duas funções que fazem a mesma coisa: calculaPontos e pontuacaodotime. Vc poderia simplificar e manter apenas uma delas.

<script>
var calcularPontuacao = function(vitorias, empates) {
  return parseInt(vitorias) * 3 + parseInt(empates);
}

var mostrar = function(mensagem) {
  document.write(mensagem + "<br/><br/><hr/>");
}

var vitorias, empates;

vitorias = prompt("Vitórias do adversário");
empates = prompt("Empates do adversário");
var pontosAdversario = calcularPontuacao(vitorias, empates);
mostrar("Adversário fez: " + pontosAdversario);

vitorias = prompt("Vitórias do nosso time");
empates = prompt("Empates do nosso time");
var pontosNossoTime = calcularPontuacao(vitorias, empates);
mostrar("Nosso time fez: " + pontosNossoTime);

if(pontosNossoTime > pontosAdversario) mostrar("Estamos ganhando!!!");
else if(pontosNossoTime < pontosAdversario) mostrar("Estamos perdendo.");
else mostrar("Estamos empatados");
</script>

nessa parte que fico com dúvidas, com os argumentos da função atribuem o valor que deu entrada , já que na linha de baixo só estou informando que a variavel pontosAdversario = calculaPontuacao(vitorias,empates)

No inicio do código vc criou uma função e forneceu toda a informação que o interpretador do JavaScript precisa pra fazer o trabalho dele.

  • Deu um nome (calcularPontuacao).
  • Disse que ela aceitará dois argumentos (vitorias e empates - Note que estes poderiam ser quaisquer nomes; vc poderia chamá-lo de a e b).
  • Definiu que ela retornará algum valor.

Repare que os nomes são apenas pra facilitar nossa vida como programadores. É importante que a gente dê nomes significativos para que nós mesmos ou outros possam olhar o código e já entender o que tá acontecendo ali.

var x = function(y, z) {
    return y * 3 + z;
}

E não há nada que impeça qualquer um de fazer isso:

// repare empates tá no lugar errado!
var pontosDeAlguem = calcularPontuacao(empates, vitorias);

Seu programa fará o trabalho ele que é pegar o primeiro argumento, multiplicar por 3 e depois somar com o segundo argumento e retornar o valor. Só que sabemos que a pontuação não vai ficar certa, pois empates serão calculados como se valessem 3 pontos. Então é apenas uma questão de nomes para deixar mais claro o que queremos/devemos fazer.

Qualquer coisa pergunta mais pra gente ver se chega numa luz!

Deu uma grande luz amigo, Obrigado
ficou mais claro que independente de que nomes e função eu der, assim que eu der a entrada das variaveis e chamar a função ela automaticamente ira atribuir as entradas na função chamada e executar o que tem ali dentro, tá claro meu raciocínio?

Acho que ficou claro. Gostaria apenas de complementar.

Em JavaScript, para definir uma função vc faz assim:

function nomeDaFuncao() {
    /* Corpo da função */
}

function umaFuncaoComParametros(parametro1, parametro2, parametro3) {
    /* ... */
}

parametro1, parametro2 e parametro3 são considerados nomes de variáveis. Variáveis definidas entre os parenteses de uma função são chamados de parâmetros. Eles existem apenas dentro do corpo da função onde foram definidos.

Isto daria erro:

function teste(parametro) {
        parametro = "Hello, World!";
}

document.write(parametro); // Erro!

O interpretador dirá que parametro não foi definido e é lógico, pois ela só é “visivel” de dentro da função teste. Por isso eu poderia usar nomes iguais.

function umaFuncaoQualquer(umaVariavel) { /* ... */ }

var umaVariavel = 123;

var umObjeto = {
    umaVariavel: "Hello!"
};

var x = 456;
var x = 789;

É possível usar nomes iguais desde que estejam em contextos diferentes.

Ali eu defini duas vezes uma variável chamada x dentro do mesmo contexto. Isso não gera erro, o problema é que a última definição sobreescreve (ou inutiliza) a primeira.

Quando vc invoca uma função que possua parametros, vc deve fornecer valores para ocuparem esses parametros. Tais valores são chamados de argumentos. Argumentos são “copiados” para dentro dos respectivos parametros.

umaFuncaoComParametros("Teste", 123, true);

// Aqui o valor contido em x é usado como argumento
// para a função abaixo. Ou seja, o valor de x é copiado
// pra dentro do parametro de umaFuncaoQualquer
var x = 987;
umaFuncaoQualquer(x);

Tudo isso independe de nomes.

function multiplicar(a, b) {
    // pelo nome, espera-se que multiplique a e b, mas na verdade soma
    return a + b; 
}

// Como assim? Diz que calcula idade, mas pede o nome completo
// e no final apenas exibe uma mensagem!!!
function calcularIdade(primeiroNome, nomeDoMeio, ultimoNome) {
    document.write("Olá, " + primeiroNome);
    document.write(nomeDoMeio + " é um belo nome do meio;");
    document.write("mas " + ultimoNome + " tá fora de moda!");
}

Nomes são importantes pro programador, mas dizem pouca coisa pro computador. É importante nomear corretamente funções, classes e variáveis para tornar o desenvolvimento mais simples, mais fácil de ler e entender e, futuramente, de manter.

Último detalhe… Funções anonimas; são funções sem nomes. São úteis pra várias coisas que vc verá mais pra frente. A forma como vc criou suas funções até agora foi baseada nelas.

Normalmente, para invocar uma função, ela precisa de um nome, né? Mas mesmo que não tenha, é possível dar um “apelido”.

// A linha abaixo não faz sentido! Pra quê criar uma função
// sem nome se não dá pra invocar ela depois?
// na verdade esta linha dá até erro!
function() { /* ... */ }

// Aqui criamos uma função e logo em seguida a colocamos
// dentro de outraVariavel que passa a ser o tal apelido.
var outraVariavel = function() { /* ... */ }

O jeito certo/recomendado/popular de definir uma função em JS hoje em dia eu não sei, mas é importante saber destas possibilidades!

Até mais.

1 curtida

A parte do nomes já está claro, sei que o interpretador não lê o que escreve, mas é a logica que fiquei confuso, sobre o interpretador atribuir os valores aos argumentos das funções chamadas mas ficou tudo muito claro agora, Obrigado

1 curtida