Оптимизација на повторување на тешки операции во JavaScript

Во претходната лекција повторните повикувања на функции всушност заземаат многу малку време и нашата оптимизација нема да заштеди многу. Сепак, сè ќе биде многу полошо ако неколку пати го повикаме "тешката" функција, која се извршува прилично долго време.

Нека, на пример, имаме функција која ги наоѓа делителите на број:

javascriptfunction getDivisorsSum(num) {
  let res = 0;
  
  for (let i = 1; i <= num; i++) {
    if (num % i === 0) {
      res += i;
    }
  }
  
  return res;
}

Очигледно е дека оваа функција е прилично "тешка". Затоа лоша идеја би било да се напише ваков код:

javascriptlet num = 123456;

if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
  console.log('+++');
} else {
  console.log('---');
}

Подобро е, се разбира, "тешката" операција да се изврши еднаш и резултатот да се запише во променлива, а потоа да се користи таа променлива на потребните места:

javascriptlet num = 123456;
let sum = getDivisorsSum(num);

if (sum >= 10 && sum <= 100) {
  console.log('+++');
} else {
  console.log('---');
}
Задание 1

Оптимизирајте го кодот прикажан подолу:

javascriptlet num = 1233456789;

if (getSumSquare(num) >= 10 && getSumSquare(num) <= 100) {
  console.log('+++');
} else {
  console.log('---');
}

function getSumSquare(num) {
  let digits = String(num).split('');
  let sum = 0;
  
  for (let digit of digits) {
    sum += digit ** 2;
  }
  
  return sum;
}