Olá Eduardo, tudo bem com você?
O parâmetro de uma função, é o que a função espera receber para ser executada, isso é, o que for passado por parâmetro em uma função é algum dado importante para a função utilizar, e esse parâmetro pode ser do tipo numérico, texto, vetores, enfim, qualquer tipo de dado que possamos declarar.
Neste caso que você apresentou, quando declaramos a função
function passouTodaATela(xCarro){
return xCarro < - 50;
}
definimos que a função passouTodaATela(xCarro) espera um xCarro para executar. Para entender melhor, sempre é interessante pensar qual o papel do que esperamos como parâmetro, podemos fazer a pergunta: o que é um xCarro?
Nesse caso, sabemos que um xCarro é a posição x de um único carro na nossa tela (note que a escolha do nome da variável é muito importante ao entender o que cada variável faz. Imagine que o nome da variável fosse só 'x': o que é 'x'?' x' de onde?). Por fim, a função recebe essa posição x de um carro e nos diz se ele já atravessou toda a tela.
Agora que sabemos para que serve a função passouTodaATela(xCarro) e o que ela recebe como parâmetro, vamos analisar a função voltaPosicaoInicialDoCarro()
function voltaPosicaoInicialDoCarro(){
for(let i = 0; i < imagemCarros.length; i = i + 1){
if(passouTodaATela(xCarros[i])){
xCarros[i] = 600;
}
}
}
A primeira coisa a se notar é que essa função não recebe nenhum parâmetro: ela apenas executa suas instruções.
Sobre a execução, essa função faz um for loop para iterar sobre a lista de carros que temos aparecendo na nossa tela e verifica para cada carro que temos nessa lista se ele passou da tela, utilizando nossa função passouTodaATela(xCarro), e caso ele tenha passado da tela, a função reajusta a posição dele para o início da tela.
Para ficar mais claro, vamos imaginar a nossa lista de carros com
// 0 1 2
xCarros = [xCarro1, xCarro2, xCarro3];
ou seja, 3 carros diferentes.
Na primeira iteração, quando i é igual a 0, será executado
function voltaPosicaoInicialDoCarro(){
for(let i = 0; i < imagemCarros.length; i = i + 1){
if(passouTodaATela(xCarros[0])){
xCarros[i] = 600;
}
}
}
ou seja, vamos passar o carro que está na posição 0 da lista xCarros (xCarro1) e executar a verificação nele.
Na segunda iteração, quando i é igual a 1, será executado
function voltaPosicaoInicialDoCarro(){
for(let i = 0; i < imagemCarros.length; i = i + 1){
if(passouTodaATela(xCarros[1])){
xCarros[i] = 600;
}
}
}
agora, a verificação é na posição 1 da lista xCarros (xCarro2), utilizando a função passouTodaATela(xCarro)
Por fim, na ultima iteração i = 2
function voltaPosicaoInicialDoCarro(){
for(let i = 0; i < imagemCarros.length; i = i + 1){
if(passouTodaATela(xCarros[2])){
xCarros[i] = 600;
}
}
}
e será executada a mesma verificação, só que com o xCarro3, que está na posição 2 da nossa lista.
Portanto, a diferença é que quando acessamos a variável xCarros, estamos na verdade acessando toda a lista de carros ([xCarro1,xCarro2,xCarro3])
Já quando acessamos xCarros[i], estamos acessando o carro que está na posição i da lista xCarros, e é por esse motivo que temos que utilizar desta maneira. Pense que um carro tem a informação de onde ele está, a lista de carros apenas sabe que os carros existem e onde encontrar eles, mas não onde eles estão
Espero que tenha ficado claro.
Me coloco à disposição e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!