Почему мы тело цикла оборачиваем в функцию?
Потому, что onload выполняется асинхронно. На момент её выполнения цикл уже может закончиться и переменная цикла i будет иметь конечное значение, равное divs.length. Оборачивая тело цикла в анонимную функцию, мы создаём замыкание, в котором i неизменна.
Потому что во время события load цикл может уже закончиться и переменная i будет отличная от той которая нам была нужна. 
В данном случаи анонимная функция используется для замыкания и переменная i всегда октуальна