Ramai pembangun tidak senang dengan amalan menghantar rentetan ke setTimeout kerana kebimbangan prestasi, potensi risiko keselamatan dan penamatannya. status. Walau bagaimanapun, mungkin terdapat senario yang jarang berlaku di mana sintaks ini boleh memberi manfaat.
Sintaks tradisional untuk setTimeout dan setInterval melibatkan menghantar rentetan yang mewakili kod untuk dilaksanakan. Contohnya:
<code class="javascript">setTimeout('doSomething(someVar)', 10000);</code>
Walau bagaimanapun, JavaScript moden menggalakkan penggunaan rujukan fungsi sebaliknya:
<code class="javascript">setTimeout(function() { doSomething(someVar); }, 10000);</code>
Perdebatan timbul apabila mempertimbangkan sama ada terdapat adalah sebarang sebab yang sah untuk menyimpang daripada sintaks yang disyorkan. Satu hujah yang mungkin adalah keinginan untuk mengakses fungsi atau pembolehubah yang berada dalam skop global tetapi mungkin telah ditindih secara setempat.
Walaupun rasional ini, penggunaan rentetan dalam setTimeout sangat tidak digalakkan. Pembolehubah global masih boleh diakses melalui sifat objek tetingkap. Contohnya:
<code class="javascript">setTimeout(window.doSomething(someVar), 10000);</code>
Elaun rentetan sebagai hujah untuk setTimeout dan setInterval berkemungkinan berakar pada faktor sejarah. Versi awal JavaScript hanya menyokong rentetan. Menambah keupayaan untuk lulus rujukan fungsi ialah penambahan kemudian. Untuk memastikan keserasian ke belakang, penyemak imbas masih membenarkan sintaks rentetan, walaupun ia tidak digunakan lagi.
Walaupun secara teknikalnya mungkin untuk menghantar rentetan kepada setTimeout dalam kes tertentu, amalan itu secara amnya tidak disyorkan kerana terdapat pendekatan alternatif. Penggunaan rujukan fungsi memberikan prestasi yang lebih baik, meningkatkan keselamatan dan mematuhi garis panduan kod moden. Oleh itu, sintaks rentetan yang ditamatkan harus dielakkan untuk kejelasan, kebolehselenggaraan dan kualiti kod keseluruhan.
Atas ialah kandungan terperinci Adakah Perlu Meluluskan String ke setTimeout?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!