Pengoptimuman Pengulangan Operasi Berat dalam JavaScript

Dalam pelajaran sebelumnya, panggilan berulang fungsi sebenarnya mengambil masa yang sangat sedikit dan pengoptimuman kami tidak akan menjimatkan banyak. Walau bagaimanapun, keadaan akan menjadi lebih teruk jika kita melakukan beberapa kali panggilan fungsi "berat" yang mengambil masa yang agak lama untuk dilaksanakan.

Katakan, sebagai contoh, kita mempunyai fungsi yang mencari pembahagi bagi suatu nombor:

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

Jelaslah, fungsi ini agak "berat". Oleh itu, adalah idea yang tidak baik untuk menulis kod seperti ini:

javascriptlet num = 123456;

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

Sudah tentu, lebih baik untuk melaksanakan operasi "berat" sekali sahaja dan merekodkan hasilnya ke dalam pembolehubah, kemudian menggunakan pembolehubah itu di tempat-tempat yang diperlukan:

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

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

Optimumkan kod di bawah:

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