i--
затем, чтобы, удалив только что какой-то элемент вне диапазона, «текущий» элемент указывал на следующий.i=2
, текущий элемент arr[2]
это 8, вне диапазона. arr.splice(2,1)
удалит этот элемент. Теперь на месте arr[2]
оказывается уже 1.i--
, следующее значение i
в итерации цикла будет уже 3, а arr[3]
это 12 – выходит, "1" пропустили и даже не рассматривали.