1
resposta

Por que não declaramos "let" na lista das imagens dentro do PreLoad ?

Eu sei que se declararmos let, vai ser apresentado um erro, eu só queria saber o motivo de ele funcionar sem let e o motivo de ele dar erro se usarmos let

1 resposta

João, coloquei o código para referência:

let imagemDaEstrada;
let imagemDoAtor;
let imagemCarro;
let imagemCarro2;
let imagemCarro3;

function preload(){
  imagemDaEstrada= loadImage("imagens/estrada.png");
  imagemDoAtor= loadImage("imagens/ator-1.png");
  imagemCarro= loadImage("imagens/carro-1.png");
  imagemCarro2= loadImage("imagens/carro-2.png");
  imagemCarro3= loadImage("imagens/carro-3.png");
  imagemCarro4= loadImage("imagens/carro-4.png");
  imagemCarro5= loadImage("imagens/carro-5.png");
  imagemCarro6= loadImage("imagens/carro-6.png");
  imagemCarros= [imagemCarro, imagemCarro2, imagemCarro3, imagemCarro4, imagemCarro5, imagemCarro6];
}

Pelo que entendi o que você queria fazer era:

function preload(){
  let imagemDaEstrada= loadImage("imagens/estrada.png");
  let imagemDoAtor= loadImage("imagens/ator-1.png");
  let imagemCarro= loadImage("imagens/carro-1.png");
  let imagemCarro2= loadImage("imagens/carro-2.png");
  let imagemCarro3= loadImage("imagens/carro-3.png");
  let  imagemCarro4= loadImage("imagens/carro-4.png");
  let imagemCarro5= loadImage("imagens/carro-5.png");
  let imagemCarro6= loadImage("imagens/carro-6.png");
  let imagemCarros= [imagemCarro, imagemCarro2, imagemCarro3, imagemCarro4, imagemCarro5, imagemCarro6];

Se eu entendi certo, o erro acontece pois as variáveis criadas dentro da função só são vistas pela função, e caso o compilador julgue necessário as deleta após o uso para economizar memória. Por isso elas foram declaradas fora da função, para serem vistas por todo nosso programa.

Agora, se por algum motivo você precisa que as variáveis sejam criadas dentro da função, você por usar o comando return para retornar como vetor:

return [imagemDaEstrada, imagemDoAtor, imagemCarros];

ou retornar como objeto (você ainda não viu isso, mas não vai demorar):

return {
    imagemDaEstrada,
    imagemDoAtor,
    imagemCarros
};

mais informação sobre o uso de return você pode consultar em:

https://www.javascripttutorial.net/javascript-return-multiple-values/#:~:text=JavaScript%20doesn%27t%20support%20functions,array%2C%20or%20properties%20from%20objects.