ну разница во внутренней реализации for++ и for--
. опираться на мнение какого-то программера конечно здорово, но вы можете самостоятельно провести бенчмарк с замером времени в момент вызова и окончания в момент выдачи результата.
в большинстве современных браузеров (т.е. это не сложности цикла зависит, а от движков браузеров) for++ быстрее работает. в последнее время его вытесняет filter и reduce по быстродействию.
нет, я не говорю что вываливается с ошибкой, я спрашиваю почему не вываливается, потому что не понимаю что является условием выхода из цикла. т.е. это норм работает применительно к массивам, так? т.е. в последней итерации он получает arr.length = -1, получает отказ как нереферентное значение (т.к. length от 0 до индекса последнего элемента +1) и спокойно завершает цикл, я так понял.
upd: вроде доперло,
цикл for
работает так:
получает первый шаг i = arr.length и это известно до 1 итерации
пост-итерационное действие отсутствует, тут просто. интересна серединка:
далее он проверяет возвращает ли true выражение i = i - 1
, т.е. не является ли результат вычисления нулем (грубо)
на последней итерации, поскольку это постфиксный декремент, он в условие возвращает 1
, уменьшается на единицу, передает в цикл 0
, там совершаются какие-то операции с i == 0
и перед следующей итерацией оно снова проверяет i = i - 1
, которое возвращает 0
и завершает цикл. Гениально.
и что интересно, на 1ой итерации цикла происходят операции с последним элементом массива, т.к. в цикл возвращается уже arr.length - 1
, что и есть индекс последнего элемента массива.