Então, eu acredito que o procedimento/tratamento é diferente por conta de regra de sistema. (irei pesquisar mais e trago depois uma resposta).
Mas irei explicar como que o sistema trata cada um:
Para as LISTAS, para a função é passada a REFERÊNCIA da localização daquela variável LISTA.
Para os números, para a função é passado o VALOR daquela variável.
Se você faz uma função para a LISTA, o sistema irá tratar da seguinte maneira:
<script>
function passandoReferenciaLista (referenciaDaLista){ // vai trazer a referência da lista de "compras"
referenciaDaLista[0] = 6; // É como se tivesse escrito assim: compras[0] = 6 // A referência da lista "compras" tomou o lugar de "referenciaDaLista" e mudou a posição 0 da lista de "compras" para 6.
}
var compras = [3, 5, 8];
console.log(compras); // Antes: [3, 5, 8]
passandoReferenciaLista(compras); // faz a modificação da lista
console.log(compras); // Depois: [6, 5, 8]
</script>
Uma mesma função para número o resultado é diferente.
Se você faz uma função para o NÚMERO, o sistema irá tratar da seguinte maneira:
<script>
function paraOvalorDoNumero (valorDoNumero){ //Ele tras o próprio número 3
valorDoNumero = 6; // É como se tivesse escrito assim: 3 = 6 // Não tem como 3 receber 6.
}
var preco = 3;
console.log(preco); //3
paraOvalorDoNumero(preco);
console.log(preco); //3 // permance 3, pq a função não tina como fazer 3 receber 6.
</script>
Espero ter ajudado.
Sucesso na sua jornada!!