Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah Saiz Tindanan JavaScript Penyemak Imbas Mengehadkan Pelaksanaan Fungsi Impak?

Bagaimanakah Saiz Tindanan JavaScript Penyemak Imbas Mengehadkan Pelaksanaan Fungsi Impak?

DDD
DDDasal
2024-10-27 01:50:03899semak imbas

How Does Browser JavaScript Stack Size Limit Impact Function Execution?

Had Saiz Tindanan Javascript Penyemak Imbas: Mendedahkan Kerumitan

Isu limpahan tindanan Javascript sisi klien, terutamanya yang lazim dalam IE, boleh timbul daripada saiz tindanan terhad penyemak imbas berbanding dengan pelayar lain seperti Firefox atau Chrome. Had ini boleh menyebabkan fungsi terputus semasa pelaksanaan kerana ruang tindanan tidak mencukupi.

Untuk menggambarkan had saiz tindanan, pertimbangkan kod berikut:

<code class="html"><script type="text/javascript">
  function doSomething() {
    var i = 3200;
    doSomethingElse(i);
  }

  function doSomethingElse(i) {
    if (i == 0) return -1;
    doSomethingElse(i - 1);
  }

  doSomething();
</script></code>

Apabila dilaksanakan dalam IE, kod ini meningkat pengecualian limpahan tindanan sekitar i = 3200, manakala penyemak imbas seperti Chrome dan Firefox boleh mengendalikan rekursi yang jauh lebih mendalam.

Untuk mengenal pasti fungsi yang bertanggungjawab untuk limpahan tindanan dan mendapatkan surih tindanan, ujian mudah boleh dilakukan:

<code class="javascript">var i = 0;
function inc() {
  i++;
  inc();
}

try {
  inc();
} catch (e) {
  // Adjust for the StackOverflow sandbox's additional frame
  i++;
  console.log('Maximum stack size is', i, 'in your current browser');
}</code>

Ujian ini secara berperingkat memanggil fungsi inc sehingga limpahan tindanan berlaku. Dengan mengelog nilai i apabila pengecualian ditangkap, saiz tindanan maksimum boleh ditentukan.

Atas ialah kandungan terperinci Bagaimanakah Saiz Tindanan JavaScript Penyemak Imbas Mengehadkan Pelaksanaan Fungsi Impak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn