Opa, tudo bom Felipe?
Então, essa confusão é normal no início, mas não tem nada de mais nisso, vou tentar te explicar de uma maneira mais esmiuçada.
Os parâmetros estão segmentados da seguinte forma:
A função que o possui, Recebe um parâmetro.
Quem chama a função, Passa um parâmetro.
Agora um exemplo:
Vamos supor que você queira calcular o IMC de uma pessoa.
Esta pessoa, possui peso e altura, como descrito abaixo:
Pessoa { peso : 80, altura : 2.0, imc : 0 }
Ao capturar estes valores você teria algo do tipo:
var pesoPessoa = Pessoa.peso;
var alturaPessoa = Pessoa.altura;
E você também teria que ter o imc dessa pessoa, como no código abaixo:
var imcPessoa = Pessoa.imc;
Porém, você só precisa alterar este valor do imc, então para separar o código, você cria uma função que recebe como parâmetro o peso e a altura para calcular o imc.
function CalcularImc(peso, altura){
return peso / (altura * altura);
}
Essa função, vai receber como parâmetro, tuas duas variáveis (pesoPessoa e alturaPessoa)
Agora veja como ficária no código:
Pessoa { peso : 80, altura : 2.0, imc : 0 }
var pesoPessoa = Pessoa.peso;
var alturaPessoa = Pessoa.altura;
// Agora, ao envés de criarmos uma váriável para capturar o imc da pessoa, fazemos isso diretamente:
Pessoa.imc = CalcularImc(pesoPessoa , alturaPessoa );
function CalcularImc(peso, altura){
return peso / (altura * altura);
}
Explicação:
Ao Enviar os parâmetros pesoPessoa e alturaPessoa, que respectivamente representam 80 e 2.0 para a função CalcularImc o calculo seria efetuado
Agora repare que esta função retorna o resultado do calculo 80 / (2 * 2), que no caso seria 20.
Então, esse valor que é Retornado pela função (20), é atribuído ao:
Pessoa.imc = CalcularImc(pesoPessoa , alturaPessoa );
De outra maneira, isso significaria o seguinte:
Pessoa.imc = CalcularImc(80, 2.0);
Logo:
Pessoa.imc = 20;
Se você quisesse reutilizar essa função para calcular o IMC de outra Pessoa, não precisaria repetir o calculo, bastaria capturar as informações da outra Pessoa e envia-las como parâmetro do CalcularImc.
Para resumir tudo, você utiliza os parâmetros para encapsular informações, ao envés de deixa-las no Escopo-Global.
Quando uma função não tem acesso as variáveis de outro bloco de função, você passa como parâmetro.
Supondo que você tenha capturado uma informação muito grande em um escopo de uma função, e deseja manipular esta informação numa função reutilizavel, é muito melhor passa-la como parâmetro, do que ter que capturar toda essa informação gigantesca na função.
Isto é só um exemplo, mas existem diversos outros casos.
Espero ter ajudado.