Оптимизација понављања тешких операција у 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;
}