Optymalizacja powtarzania ciężkich operacji w JavaScript

W poprzedniej lekcji powtórne wywołania funkcji faktycznie zajmują bardzo mało czasu i nasza optymalizacja zaoszczędzi nie bardzo wiele. Jednakże, wszystko będzie znacznie gorzej, jeśli będziemy kilka razy wykonywać wywołanie "ciężkiej" funkcji, która wykonuje się dość długo.

Załóżmy, na przykład, że mamy funkcję, która znajduje dzielniki liczby:

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

Oczywiście, ta funkcja jest dość "ciężka". Dlatego złym pomysłem byłoby napisanie takiego kodu:

javascriptlet num = 123456;

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

Lepiej, oczywiście, wykonać "ciężką" operację raz i wynik zapisać w zmiennej, a potem używać tej zmiennej w potrzebnych miejscach:

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

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

Zoptymalizuj poniższy kod:

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