Hola Salvadoruve2.
Primer for:
for (var i=1; i<=10; i++){
subpalabra[i] = subpalabra[i-1] + palabra.charAt(i-1);
}
En la primera línea del for especificamos las veces que debe ejecutarse el bucle, en este caso serán 10 veces, empezando con i=1 hasta i=10, y con i++ lo que hacemos es incrementamos el valor de i en una unidad cada vez que se ejecute el bucle.
Cuando i = 1;
subpalbra[1] = (subpalabra[1-1=0] es igual '') + (palbra.chartAt(1-1=0) = 'E');
Con i=2;
subpalabra[2] = (subpalabra[2-1=1] que es igual a 'E') + (palabra.charAt(2-1=1) que es igual a 's');
Con i=3;
subpalabra[3] = (subpalabra[3-1=2] que es igual a 'Es') + (palabra.charAt(3-1=2) que es igual a 't');
Con i=4;
subpalabra[4] = (subpalabra[4-1=3] que es igual a 'Est') + (palabra.charAt(4-1=3) que es igual a 'e');
...
Con i=10;
subpalabra[10] = (subpalabra[10-1=9] que es igual a 'Esternocl') + (palabra.charAt(10-1=9) que es igual a 'e');
En el segundo for, lo que hacemos es guardar los valores de cada elemento del array subpalabra[] dentro de la variable msg, y a cada vez que añadimos un valor a la variable msg, también añadimos un salto de línea, '\n'. Este bucle también se ejecutará 10 veces como el primero.
El tercer bucle, añade a la variable msg la palabra al revés. En este caso el bucle empieza desde i = 22 hasta llegar a i=1, para ir introduciendo las letras una a una empezando desde el final de la palabra.
for (var i=palabra.length; i>0; i--){
msg = msg + palabra.charAt(i-1);
}
Espero que te valga, pero si sigues teniendo dudas, dilo.
Saludos.