Вторая функция использует оператор по модулю для извлечения последней цифры:
1236 % 10
= 1236 - 10 * floor(1236 / 10)
= 1236 - 1230
= 6
Когда извлекается последняя цифра, она вычитается из числа:
1236 - 6
= 1230
Ичисло делится на 10
:
1230 / 10
= 123
Каждый раз, когда этот цикл повторяется, последняя цифра обрезается и добавляется к сумме.
Оператор по модулю возвращает одну цифру, еслилевая сторона меньше, чем правая (что произойдет для любого 1-значного числа), то есть, когда цикл прерывается:
1 % 10
= 1
Вот как начальная цифра прибавляется к итогу.
Менее числовая альтернатива была бы такой:
function sumDigits(number) {
var str = number.toString();
var sum = 0;
for (var i = 0; i < str.length; i++) {
sum += parseInt(str.charAt(i), 10);
}
return sum;
}
Она буквально выполняет то, что вы пытаетесь сделать, итерацию по цифрам числа (путем преобразования его в строку).