Olá Gilberto, tudo bem?
Em relação a sua dúvida, não há alteração no processamento do jogo. Contudo dividir as responsabilidades em mais de uma função é algo recorrente que traz mais legibilidade e simplicidade para o código. Exemplo:
function movimentaCarro(){
for(let i = 0; i<imagemCarros.length; i++){
xCarros[i] -= velocidadeCarros[i];
}
}
function voltaPosicaoInicialDoCarro(){
for( let i = 0; i<imagemCarros.length; i++){
if (passouTodaTela(xCarros[i])){
xCarros[i] = 600;
}
}
}
function passouTodaTela(xCarros){
return xCarros <-50;
}
Perceba que no código apresentado, cada função atua de maneira independente em uma das especificidades relacionadas às imagens dos carros, e que por conta disso, as informações apresentadas podem ser lidas com mais clareza.
Recomendo um artigo que explica a importância do design de código no cotidiano da pessoa programadora, acredito que ele possa esclarecer ainda mais estas questões.
Espero ter ajudado, continue se dedicando, e caso tenha dúvidas, recorra ao fórum.
Um grande abraço e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado! ✓.