Buenas Pedro
a) Bien
b) Bien
Como bien comentas el for del apartado a) es extraño y no se corresponde con la forma habitual del for que sería la que comentas, simplemente
for(var i=elementosSelectInput.length; i>0; i--){
arrayNodos.unshift(elementosSelectInput[i-1]);
}
que además se entiende mejor.
Para buscarle explicación a esto tendríamos que tener en cuenta lo siguiente:
Igual que un if puede ir sin { } un bucle for también puede ir sin { }, es decir, for (...) sería igual de válido que for (...) { }
Por otro lado, la sentencia for se usa normalmente de una forma estándar, pero admite cosas que a priori pueden parecer extrañas.
Por ejemplo en lugar de declarar una variable de control, declarar varias variables. Por ejemplo var i, j, k=elementosSelectInput.length; sería legal
Otra cosa que admite que puede parecer rara es una condición de terminación del bucle donde aparentemente no hay condición. Por ejemplo en lugar de i>0 la condición podría ser simplemente i. Esto lo que significaría es "para determinar si el bucle debe terminar, evalúa la variable i. En caso de i ser true, continua repitiendo el bucle. En caso de i valer false, termina el bucle.
Finalmente, la cláusula de incremento o decremento del bucle que normalmente es algo que incrementa o decrementa la variable de control puede estar formada por varias sentencias separadas por comas. ¿Qué sentido tiene esto?
Si vemos el bucle for como esta estructura: for (first section; second section; third section);
En la tercera parte del bucle tenemos un código que se ejecuta en cada pasada del bucle. Normalmente usamos este código para controlar la variable índice, pero podemos usarlo para otras cosas.
Fíjate en este código: for(var i = 5; i--; alert('i vale '+i));
Este código es un poco engañoso y no demasiado fácil de entender, aunque es legal para el intérprete. Lo que hacemos aquí es decir "El contador del bucle comienza en 5. La condición de evaluación es i--. Esto supone evaluar si i vale 0 en cuyo caso se detendría el bucle, y reducir el valor de i en una unidad. El truco aquí es que estamos haciendo dos cosas en un mismo paso, en el mismo paso evaluamos y reducimos el valor de i. Finalmente en lugar de usar el código de ejecución en cada pasada para reducir el contador, lo usamos para ejecutar sentencias.
Podría ser más de una sentencia, for(var i = 5; i--; alert('i vale '+i), alert ('Hay que ver'));
Bueno esto no veo demasiado recomendable usarlo pero por lo menos saber interpretarlo si nos lo encontramos por ahí.
Salu2