Optimizacija ponavljanja težkih operacij v JavaScriptu

V prejšnji lekciji ponovni klici funkcij v resnici zasedejo zelo malo časa in naša optimizacija prihrani ne zelo veliko. Vendar pa bo vse veliko slabše, če bomo večkrat klicali "težko" funkcijo, ki se izvaja dokaj dolgo časa.

Recimo, na primer, da imamo funkcijo, ki poišče delitelje števila:

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

Očitno je, da je ta funkcija precej "težka". Zato je slaba ideja napisati takšno kodo:

javascriptlet num = 123456;

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

Bolje je, seveda, izvesti "težko" operacijo enkrat in rezultat zapisati v spremenljivko, nato pa uporabiti to spremenljivko na želenih mestih:

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

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

Optimizirajte spodnjo kodo:

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;
}