Fiz um código para você, para tentar facilitar o entendimento.
Eu declarei uma lista onde cada posição da lista existe uma string com o nome de uma linguagem de programação.
No primeiro exemplo, eu estou imprimindo no console cada posição da lista sem utilizar o for. Perceba que toda vez que preciso imprimir no console, eu preciso informar manualmente a posição do texto que quero exibir.
Imagine que a lista tivesse 100 posições, teríamos que escrever 100 vezes.
let linguagens = ['Java', 'C#', 'JavaScript', 'Cobol', 'Ada'];
//[0] [1] [2] [3] [4]
console.log(linguagens[0]); //Imprime Java
console.log(linguagens[1]); //Imprime C#
console.log(linguagens[2]); //Imprime JavaScript
console.log(linguagens[3]); //Imprime Cobol
console.log(linguagens[4]); //Imprime Ada
O laço for serve para facilitar nossa vida, possuindo três blocos de instruções, como no exemplo abaixo.
for(let posicao = 0; posicao < linguagens.length; posicao = posicao + 1){
console.log(linguagens[posicao]);
}
A primeira instrução let posicao = 0
, declara uma variável que será utilizada na lógica do for, posicao inicia com o valor zero.
O segundo instrução posicao < linguagens.length
, define a condição que será testada antes de iniciar o for, o for só será executado se a instrução retornar true.
O terceira instrução, posicao = posicao + 1
incrementa em + 1 a variável posicao sempre que a segunda instrução retornar true.
Sempre que a segunda instrução do for retornar true, o valor da variável na terceira instrução será incrementada em + 1, em seguida o for será executado.
Internamente o for está fazendo isso.
console.log(linguagens[0]);
console.log(linguagens[1]);
console.log(linguagens[2]);
console.log(linguagens[3]);
console.log(linguagens[4]);
O for irá executar até que a variável posicao seja menor que a quantidade de valores da lista posicao < linguagens.length